使用 finditer 和 lookahead 的空正则表达式响应
Empty Regex response using finditer and lookahead
我在使用前瞻时无法理解正则表达式的行为。
我有一个给定的字符串,其中有两个重叠的模式(从 M
开始到 p
结束)。我的预期输出是 MGMTPRLGLESLLEp
和 MTPRLGLESLLEp
。我下面的 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
您可能希望在捕获组中包含 M
和 p
字符:
pattern = re.compile(r'(?=(M.*?p))')
此时您的输出变为:
MGMTPRLGLESLLEp
MTPRLGLESLLEp
我在使用前瞻时无法理解正则表达式的行为。
我有一个给定的字符串,其中有两个重叠的模式(从 M
开始到 p
结束)。我的预期输出是 MGMTPRLGLESLLEp
和 MTPRLGLESLLEp
。我下面的 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
您可能希望在捕获组中包含 M
和 p
字符:
pattern = re.compile(r'(?=(M.*?p))')
此时您的输出变为:
MGMTPRLGLESLLEp
MTPRLGLESLLEp