我有一个dataframe列,其中包含文章的名称(名称:Article)。我正在寻找创建另一列,该列扫描Article列的每个元素,并从列表中找到以下任何关键字的存在:
['What','Why','How', 'Who', 'COVID-19', 'COVID', 'When','Where','?']
问题是是否存在“?” 返回错误:在位置32处无重复。我尝试将regex = False传递给我的代码仍然看到相同的问题
mylist = ['What','Why','How', 'Who', 'COVID-19', 'COVID', 'When','Where','?']
pattern = '|'.join(mylist)
df1_pcp['Boolean flag'] = df1_pcp.Title.str.contains(pattern)
我该如何解决?
您应该转义需要在正则表达式内保留文字(非RE)语义的字符串。您可以使用自动转义字符串re.escape()
从re
库:
import re
mylist = ['What','Why','How', 'Who', 'COVID-19', 'COVID', 'When','Where','?']
print('|'.join(mylist))
pattern = '|'.join(re.escape(elem) for elem in mylist)
print(pattern)
观察输出:
What|Why|How|Who|COVID-19|COVID|When|Where|?
What|Why|How|Who|COVID\-19|COVID|When|Where|\?
如您所见,我们对您的文字字符串,连字符和?进行转义的模式。人物逃脱了。除了字符类中的内容外,PCRE模式没有为连字符分配特殊的“元字符”含义-至少我不记得,但对于逃脱该字符也没有任何伤害。
通常re.escape
,将要传递给正则表达式引擎的字符串是一个好主意,除非您明确地保留了其“模式”质量而不是其字面字符串特征。如果您的搜索词来自现在可能已经了解了正则表达式甚至更糟的正则表达式的外部来源,并利用它们的理解来构建很小的小正则表达式,则尤其如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句