正则表达式,用于搜索从不跟随string2的string1

时间:2010-07-07 18:36:04

标签: python regex expression

如何构造正则表达式搜索模式以查找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

1 个答案:

答案 0 :(得分:3)

看起来您可以使用MAN(?!.*PN)。这与MAN匹配,并使用否定前瞻,以确保PNas seen on rubular.com)后面没有。

鉴于MAN_PN_MAN_BLEH,上述模式会找到第二个MAN,因为它后面没有PN。如果您要验证整个字符串并确保没有MAN.*PN,那么您可以使用^(?!.*MAN.*PN).*MAN.*$as seen on rubular.com)之类的内容。

参考

相关问题


非正则表达式选项

如果要按字面意思匹配字符串,那么您还可以检查子字符串出现的索引。

在Python中,findrfind分别返回子串出现的最低和最高索引。

所以要确保string1出现但从未跟string2,如果找不到字符串,则返回-1,所以看起来你可以测试这个条件:

string.rfind(s, string2) < string.find(s, string1)

这会比较最左边的string1和最右边的string2

  • 如果两者均未发生,则均为-1,结果为false
  • 如果发生string1,但string2没有,则结果为true
  • 如果两者都出现,那么最右边的string2必须位于最左边string1的左侧
    • 也就是说,string1
    • 后面没有string2

API链接