我看不到找到只能找到“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”?
答案 0 :(得分:1)
在后面模式中,您不需要^
,只要它不会出现在John
,就会匹配所有出现的Jn
由于负面背后的字符串的开头;您需要对John
和(?<!^[123I]\s)Jn|John
进行分组,以便看后面适用于这两者,因为(?<!^[123I]\s)Jn
匹配John
或s = "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