正则表达式捕获两个正则表达式模式之间的n行文本

时间:2020-06-26 00:30:10

标签: python-3.x regex re

需要一个正则表达式帮助,以在两个正则表达式匹配之间准确地获取n行文本。例如,我需要17行文本,并且使用了下面的示例,该示例不起作用。我

请参见下面的示例代码:

import re
match_string = re.search(r'^.*MDC_IDC_RAW_MARKER((.*?\r?\n){17})Stored_EGM_Trigger.*\n'), t, re.DOTALL).group()
value1 = re.search(r'value="(\d+)"', match_string).group(1)
value2 = re.search(r'value="(\d+\.\d+)"', match_string).group(1)
print(match_string)
print(value1)
print(value2)

我在此处添加了示例字符串,因为SO不允许使用长代码字符串: https://hastebin.com/aqowusijuc.xml

1 个答案:

答案 0 :(得分:1)

由于使用re.DOTALL标志,该标志得到误报,该标志允许.字符与换行符匹配。也就是说,当您匹配((.*?\r?\n){17})时,.可能会吃掉许多额外的换行符,以满足您需要的数量17。现在您还意识到\r是多余的。另外,用^.*?开始正则表达式是多余的,因为您要强迫搜索从头开始,但随后又说搜索引擎应跳过尽可能多的字符以找到MDC_IDC_RAW_MARKER。因此,一个简单而正确的正则表达式将是:

match_string = re.search(r'MDC_IDC_RAW_MARKER.*\n((.*\n){17})Stored_EGM_Trigger.*\n', t)

Regex Demo

相关问题