我想使用正则表达式来找到一个模式,它应该排除一些东西。对于此示例,"我来自我是文本文本文本文本我来自日本文本文本来自加拿大文本约翰我是来自测试测试测试的约翰先生,我是......"
表达式应仅命中"John from"或"Mr John Doe from",但不包括"I am from"
我试过这个,
re.findall(r"(?!i am from)((?:miss|mister|mr)*(?:s*w+s+){1,2})from", "i am from i am text text text text i am from Japan text text John from I am mr john doe from test test test I am" )
但它也击中了"我是">
有什么建议吗?谢谢。
最接近您期望的匹配来自这样的正则表达式:
(?:b(?:mis(?:tre|s)|mr)s+)?((?:b(?!(?:i|am|from)b)w+s+){1,2})from
您可以在其中排除要在from
后立即匹配的单词。这里的排除是通过负面的展望来完成的:
(?!(?:i|am|from)b)
现场演示
如果您只想排除"我来自",这是正确的。"我是"(不跟"来自"(不是"我来自"。
否则,只需使用"我是"来表示负面的展望。