首页 > 解决方案 > 正则表达式捕获两个正则表达式模式之间的 n 行文本

问题描述

需要正则表达式的帮助才能在两个正则表达式匹配之间准确抓取 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

标签: python-3.xregexre

解决方案


你得到误报是因为你使用了 re.DOTALL 标志,它允许.字符匹配换行符。也就是说,当您匹配 时((.*?\r?\n){17}).可能会占用许多额外的换行符以满足您所需的 17 个计数。您现在也意识到\r是多余的。此外,使用 regex 开始^.*?是多余的,因为您强制搜索从头开始,然后说搜索引擎应该跳过尽可能多的字符来查找MDC_IDC_RAW_MARKER。因此,一个简化且正确的正则表达式将是:

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

正则表达式演示


推荐阅读