Python 正则表达式以搜索从不后跟string2的string1
如何构造正则表达式搜索模式来查找不后跟string2的string1(立即或不立即) 例如,如果string1=“MAN”和string2=“PN”,示例搜索结果将是:Python 正则表达式以搜索从不后跟string2的string1,python,regex,expression,Python,Regex,Expression,如何构造正则表达式搜索模式来查找不后跟string2的string1(立即或不立即) 例如,如果string1=“MAN”和string2=“PN”,示例搜索结果将是: "M": Not found "MA": Not found "MAN": Found "BLAH_MAN_BLEH": Found "MAN_PN": Not found "BLAH_MAN_BLEH_PN": Not found "BLAH_MAN_BLEH_PN_MAN": Not found 理想情况下,一次线性搜索,
"M": Not found
"MA": Not found
"MAN": Found
"BLAH_MAN_BLEH": Found
"MAN_PN": Not found
"BLAH_MAN_BLEH_PN": Not found
"BLAH_MAN_BLEH_PN_MAN": Not found
理想情况下,一次线性搜索,而不是对string2进行第二次搜索
PS:正在使用的语言是Python看起来您可以使用
MAN(?。*PN)
。这与MAN
匹配,并使用负向前看来确保后面没有PN
()
给定MAN\u PN\u MAN\u BLEH
,上述模式将找到第二个MAN
,因为它后面没有PN
。如果要验证整个字符串并确保没有MAN.*PN
,则可以使用类似^(?。*MAN.*PN)。*MAN.*$
()的内容
工具书类
非正则表达式期权 如果要逐字匹配字符串,则还可以检查子字符串出现的索引 在Python中,
find
和rfind
分别返回子字符串出现次数的最低和最高索引
因此,要确保出现string1
,但后面永远不会紧跟string2
,并且如果找不到字符串,两者都会返回-1
,因此看起来您可以测试这种情况:
string.rfind(s, string2) < string.find(s, string1)
string.rfind(s,string2)
这将比较最左边出现的string1
和最右边出现的string2
- 如果两者均未发生,则两者都为
,结果为-1
false
- 如果出现
,但string1
未出现,则结果为string2
true
- 如果两者都出现,则最右边的
必须位于最左边的string2
string1
- 也就是说,没有任何
后跟string1
string2
- 也就是说,没有任何
MAN(?)*P(?*N?)
就是MAN(?)*P)
,这就为MAN[^P]*
等提供了可能性。我们掌握的信息越多,我们能给出的答案就越好。@apalopohapa:我认为MAN(?)*P(?=.*N))
只是MAN(?。*P.*N)
-1不使用$来匹配字符串的结尾,使用\Z.“”默认情况下不匹配换行符;您需要使用re.DOTALL标志。