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

2024-10-01 05:04:03 发布

您现在位置:Python中文网/ 问答频道 /正文

如何构造正则表达式搜索模式来查找后面不跟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

理想情况下,进行一次线性搜索,而不是对string2进行第二次搜索。在

PS:使用的语言是Python


Tags: 示例模式not情况线性blah理想found
1条回答
网友
1楼 · 发布于 2024-10-01 05:04:03

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

给定MAN_PN_MAN_BLEH,上面的模式将找到第二个MAN,因为它后面没有PN。如果要验证整个字符串并确保没有MAN.*PN,那么可以使用类似^(?!.*MAN.*PN).*MAN.*$as seen on rubular.com)的方法。在

参考文献

相关问题


非正则表达式选项

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

在Python中,find和{}分别返回子字符串出现的最低和最高索引。在

所以要确保string1出现,但后面永远不会跟string2,如果找不到字符串,两者都会返回-1,因此看起来您可以只测试以下条件:

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

这将比较string1最左边的出现和{}最右边的出现。在

  • 如果两者都不发生,则两者都是-1,结果是false
  • string1发生,而{}没有发生,则结果是{}
  • 如果两者都发生,那么最右边的string2必须在最左边string1的左边
    • 也就是说,没有string1后跟string2

API链接

相关问题 更多 >