如何构造正则表达式搜索模式以查找string1后面没有字符串2(是否立即)?
例如,如果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
理想情况下,单线性搜索,而不是第二次搜索string2。
PS:正在使用的语言是Python
答案 0 :(得分:3)
看起来您可以使用MAN(?!.*PN)
。这与MAN
匹配,并使用否定前瞻,以确保PN
(as seen on rubular.com)后面没有。
鉴于MAN_PN_MAN_BLEH
,上述模式会找到第二个MAN
,因为它后面没有PN
。如果您要验证整个字符串并确保没有MAN.*PN
,那么您可以使用^(?!.*MAN.*PN).*MAN.*$
(as seen on rubular.com)之类的内容。
如果要按字面意思匹配字符串,那么您还可以检查子字符串出现的索引。
在Python中,find
和rfind
分别返回子串出现的最低和最高索引。
所以要确保string1
出现但从未跟string2
,如果找不到字符串,则返回-1
,所以看起来你可以测试这个条件:
string.rfind(s, string2) < string.find(s, string1)
这会比较最左边的string1
和最右边的string2
。
-1
,结果为false
string1
,但string2
没有,则结果为true
string2
必须位于最左边string1
的左侧
string1
string2