如何使用正则表达式来匹配某些单词中未包含的字符?
How can I use use a regex to match characters that aren't included in certain words?
假设我想 return 在 Python 的字符串中出现的所有 'lep',但如果出现在像 'filepath' 或 'telephone'。现在我正在使用否定 lookahead/lookbehind:
的组合
(?<!te|fi)lep(?!hone|ath)
不过,我确实想要 'telepath' 和 'filephone' 以及 'filep' 和 'telep'。我见过类似的问题,但没有一个解决这种 lookahead/behind.
组合的问题
谢谢!
您可以将先行放置在后行中(反之亦然;任何组合,真的,只要每个后行都有固定的长度)。这允许您将两个条件合二为一( 不以 X 和 以 Y 结束):
lep(?<!telep(?=hone))(?<!filep(?=ath))
将回顾放在最后也会更有效率。我建议这样做,即使没有后缀(例如,lep(?<!filep)
排除 filep
)。
然而,从像 lep -telephone -filepath
这样的用户输入生成正则表达式肯定是挑剔和乏味的。如果可以,首先搜索不需要的词并消除它们会容易得多。例如,搜索:
(?:telephone|filepath|(lep))
如果搜索成功并且group(1)
不是None
,则成功。
假设我想 return 在 Python 的字符串中出现的所有 'lep',但如果出现在像 'filepath' 或 'telephone'。现在我正在使用否定 lookahead/lookbehind:
的组合(?<!te|fi)lep(?!hone|ath)
不过,我确实想要 'telepath' 和 'filephone' 以及 'filep' 和 'telep'。我见过类似的问题,但没有一个解决这种 lookahead/behind.
组合的问题谢谢!
您可以将先行放置在后行中(反之亦然;任何组合,真的,只要每个后行都有固定的长度)。这允许您将两个条件合二为一( 不以 X 和 以 Y 结束):
lep(?<!telep(?=hone))(?<!filep(?=ath))
将回顾放在最后也会更有效率。我建议这样做,即使没有后缀(例如,lep(?<!filep)
排除 filep
)。
然而,从像 lep -telephone -filepath
这样的用户输入生成正则表达式肯定是挑剔和乏味的。如果可以,首先搜索不需要的词并消除它们会容易得多。例如,搜索:
(?:telephone|filepath|(lep))
如果搜索成功并且group(1)
不是None
,则成功。