2016-12-14 8 views
0

文字列の一部が他の文字列と一致するかどうかを調べる方法はありますか?他の文字列に含まれる文字列の一部regex python

string_list = ['Benefit Cosmetics', 'Anastasia Beverly Hills'] 
string = '|'.join(string_list) 

私はurlstringにマッチしたいと思います。例えば:私はこの

url = pd.DataFrame({'urls' : ['www.amazon.com/ANASTASIA-Beverly...Brow/dp/B00GI21NZA', 'www.ulta.com/beautyservices/benefitbrowbar/']}) 

のように見えると私はのように見える文字列を持つURLを持っているために

Benefit Cosmeticswww.amazon.com/ANASTASIA-Beverly...Brow/dp/B00GI21NZA

www.ulta.com/beautyservices/benefitbrowbar/

Anastasia Beverly Hills

私はurl['urls'].str.contains('('+string+')', case = False)を試してきましたが、これは一致しません。

これを行う正しい方法は何ですか?

+0

チェックアウト:http://www.pythontutor.com/visualize.html#mode=edit –

答えて

1

私は1つのラインで正規表現としてそれを行うことはできませんが、ここで私の試みはitertoolsといずれかを使用している:

import pandas as pd 
from itertools import product 

url = pd.DataFrame({'urls' : ['www.amazon.com/ANASTASIA-Beverly...Brow/dp/B00GI21NZA', 'www.ulta.com/beautyservices/benefitbrowbar/']}) 
string_list = ['Benefit Cosmetics', 'Anastasia Beverly Hills'] 

""" 
For each of Cartesian product (the different combinations) of 
string_list and urls. 
""" 
for x in list(product(string_list, url['urls'])): 
    """ 
    If any of the words in the string (x[0]) are present in 
    the URL (x[1]) disregarding case. 
    """ 
    if any (word.lower() in x[1].lower() for word in x[0].split()): 
     """ 
     Show the match. 
     """ 
     print ("Match String: %s URL: %s" % (x[0], x[1])) 

出力:

Match String: Benefit Cosmetics URL: www.ulta.com/beautyservices/benefitbrowbar/ 
Match String: Anastasia Beverly Hills URL: www.amazon.com/ANASTASIA-Beverly...Brow/dp/B00GI21NZA 

更新:

あなたがそれを見ている方法では、代わりに次のものを使用することもできます:

import pandas as pd 
import warnings 
pd.set_option('display.width', 100) 
""" 
Supress the warning it will give on a match. 
""" 
warnings.filterwarnings("ignore", 'This pattern has match groups') 
string_list = ['Benefit Cosmetics', 'Anastasia Beverly Hills'] 
""" 
Create a pandas DataFrame. 
""" 
url = pd.DataFrame({'urls' : ['www.amazon.com/ANASTASIA-Beverly...Brow/dp/B00GI21NZA', 'www.ulta.com/beautyservices/benefitbrowbar/']}) 
""" 
Using one string at a time. 
""" 
for string in string_list: 
    """ 
    Get the individual words in the string and concatenate them 
    using a pipe to create a regex pattern. 
    """ 
    s = "|".join(string.split()) 
    """ 
    Update the DataFrame with True or False where the regex 
    matches the URL. 
    """ 
    url[string] = url['urls'].str.contains('('+s+')', case = False) 
""" 
Show the result 
""" 
print (url) 

た出力になります。私は推測

           urls Benefit Cosmetics Anastasia Beverly Hills 
0 www.amazon.com/ANASTASIA-Beverly...Brow/dp/B00...    False     True 
1  www.ulta.com/beautyservices/benefitbrowbar/    True     False 

は、あなたがデータフレームでそれをしたい場合は、より良いかもしれませんが、私は最初の方法を好みます。

関連する問題