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