如何使用正则表达式来匹配某些单词中不包含的字符?

时间:2016-06-29 22:20:09

标签: python regex negative-lookahead negative-lookbehind

假设我想要返回所有出现的' lep'在Python中的字符串中,但是如果出现在子文件中,例如' filepath'或者'电话'。现在我正在使用负前瞻/后瞻的组合:

(?<!te|fi)lep(?!hone|ath)

然而,我确实想要&#39;心灵感应&#39;和&#39; filephone&#39;以及&#39; filep&#39;并且&#39; telep&#39;我已经看过类似的问题,但没有找到解决这种前瞻/后方组合的问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以在lookbehinds中放置前瞻(反之亦然;任何组合,实际上,只要每个lookbehind都有固定的长度)。这允许您将两个条件合并为一个(不以X 开头,以Y 结尾):

lep(?<!telep(?=hone))(?<!filep(?=ath))

将看起来最后的内容也更有效率。即使没有后缀(例如lep(?<!filep)要排除filep),我也会建议这样做。

然而,从像lep -telephone -filepath这样的用户输入生成正则表达式有望变得挑剔和乏味。如果可以的话,首先搜索不需要的术语并消除它们会容易得多。例如,搜索:

(?:telephone|filepath|(lep))

如果搜索成功且group(1)不是None,则会受到影响。