Python 正则表达式以搜索从不后跟string2的string1

Python 正则表达式以搜索从不后跟string2的string1,python,regex,expression,Python,Regex,Expression,如何构造正则表达式搜索模式来查找不后跟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的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
()

给定
MAN\u PN\u MAN\u BLEH
,上述模式将找到第二个
MAN
,因为它后面没有
PN
。如果要验证整个字符串并确保没有
MAN.*PN
,则可以使用类似
^(?。*MAN.*PN)。*MAN.*$
()的内容

工具书类
相关问题

非正则表达式期权 如果要逐字匹配字符串,则还可以检查子字符串出现的索引

在Python中,
find
rfind
分别返回子字符串出现次数的最低和最高索引

因此,要确保出现
string1
,但后面永远不会紧跟
string2
,并且如果找不到字符串,两者都会返回
-1
,因此看起来您可以测试这种情况:

string.rfind(s, string2) < string.find(s, string1)
string.rfind(s,string2)
这将比较最左边出现的
string1
和最右边出现的
string2

  • 如果两者均未发生,则两者都为
    -1
    ,结果为
    false
  • 如果出现
    string1
    ,但
    string2
    未出现,则结果为
    true
  • 如果两者都出现,则最右边的
    string2
    必须位于最左边的
    string1
    • 也就是说,没有任何
      string1
      后跟
      string2
API链接

在预期示例中,它将不匹配。因此,如果出现string1,但后面紧跟着string2,则会否定查找结果。@apalopohapa:我仍然不确定是否100%正确,因此请稍后使用更多示例编辑问题,并且/或者如果某些输入失败,请拒绝接受我的答案。我会在几个小时后再讨论这个问题,看看是否有任何未解决的问题。@apalopohapa:而且,我认为
MAN(?)*P(?*N?)
就是
MAN(?)*P)
,这就为
MAN[^P]*
等提供了可能性。我们掌握的信息越多,我们能给出的答案就越好。@apalopohapa:我认为
MAN(?)*P(?=.*N))
只是
MAN(?。*P.*N)
-1不使用$来匹配字符串的结尾,使用\Z.“”默认情况下不匹配换行符;您需要使用re.DOTALL标志。