使用 finditer 和 lookahead 的空正则表达式响应

Empty Regex response using finditer and lookahead

我在使用前瞻时无法理解正则表达式的行为。

我有一个给定的字符串,其中有两个重叠的模式(从 M 开始到 p 结束)。我的预期输出是 MGMTPRLGLESLLEpMTPRLGLESLLEp。我下面的 python 代码生成两个 字符串,它们与预期输出共享一个共同的开头。

删除前瞻 (?=) 结果只有一个较大的输出字符串。有没有一种方法可以修改我的正则表达式术语以防止空字符串,以便我可以用一个正则表达式术语获得两个结果?

import re

string = 'GYMGMTPRLGLESLLEpApMIRVA'

pattern = re.compile(r'(?=M(.*?)p)')
sequences = pattern.finditer(string)

for results in sequences:
    print(results.group())
    print(results.start())
    print(results.end())

overlapping matches trick with a look-ahead 利用 (?=...) 模式在空位置匹配的事实,然后提取嵌套在前瞻中的捕获组。

您需要明确地打印出第 1 组:

for results in sequences:
    print(results.group(1))

这会产生:

GMTPRLGLESLLE
TPRLGLESLLE

您可能希望在捕获组中包含 Mp 字符:

pattern = re.compile(r'(?=(M.*?p))')

此时您的输出变为:

MGMTPRLGLESLLEp
MTPRLGLESLLEp