Skip to main content
 首页 » 编程设计

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

2024年09月03日27tuyile006

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

请您参考如下方法:

看起来您可以使用 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

API 链接