需要一个正则表达式帮助,以在两个正则表达式匹配之间准确地获取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
答案 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)