Python正则表达式匹配“John”,而不是“1 John”,“2 John”或“3 John”

时间:2017-12-17 02:38:19

标签: regex python-3.x

我看不到找到只能找到“John”的Python 3正则表达式模式,而不能找到“1 John”,“1Jn”,“2 John”,“2Jn”,“3 John”或“约叁”。

例如在r“1 John,2 John,3 John,John John,John。”,我只希望它与John的最后2次提及相匹配,而不是John的前3次提及。

我已经尝试了很多东西,并继续回到像r"(?<!\s[123I]\s)(?<!^[123I]\s)Jn|John"这样的Python 3正则表达式模式。但这抓住了约翰的所有5次提及,而不仅仅是最后两次。

有没有办法获得“John”,但不是“1 John”,“1Jn”,“2 John”,“2Jn”,“3 John”或“3Jn”?

1 个答案:

答案 0 :(得分:1)

后面模式中,您不需要^,只要它不会出现在John,就会匹配所有出现的Jn由于负面背后的字符串的开头;您需要对John(?<!^[123I]\s)Jn|John进行分组,以便看后面适用于这两者,因为(?<!^[123I]\s)Jn匹配Johns = "1 John, 2 John, 3 John, everywhere a John, John." re.findall(r'(?<![123I] )(?:Jn|John)', s) # ['John', 'John']

a in b 
b in a