我有一个包含大量目标单词的列表,需要搜索。
words = ['Word1', 'Word2', 'Word3']
我听说这样的正则表达式:
suffix = re.compile('(?:{words}) (\\w+)'.format(words='|'.join(words)))
这种方法非常高效,因为当遇到不匹配表达式的字符时,它会立即停止正则表达式的评估。
然而,反过来做就不是很高效了:
prefix = re.compile('(\\w+) (?:{words})'.format(words='|'.join(words)))
有没有一种优雅的方法来指示Python的正则表达式进行反向搜索?
编辑
我被要求添加使用示例:
# prefix search
title = re.compile('(?:Mr.|Mrs.|Ms.|Dr. |Lt.) (\\w+)')
# suffix search
company = re.compile('(\\w+) (?:Inc.| LLP.|ltd.|GMBH)')
# invoking the regex
all_people_names = title.findall(document)
all_company_names = company.findall(document)
编辑2
很多人对时间差异的重要性持怀疑态度。
我已经实现了两种方法:endswith()
和 endswith_rev()
,这些都是kabanus建议的字符串反转和结果。
以下是结果:
正如你所看到的,即使只有少量后缀,它也会产生巨大的影响。
$
锚点并没有什么用,比如对于文本'google inc is nice, but apple inc is nicer'
,我想要re.findall
返回['google', 'apple']
。如果我使用$
指令,则会强制表达式出现在搜索字符串的末尾,从而返回[]
。 - Uri Goren