繁体   English   中英

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

[英]Regular expression to capture n lines of text between two regex patterns

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

你得到误报是因为你使用了 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)

正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM