![](/img/trans.png)
[英]How to extract text between certain patterns using regular expression (RegEx)?
[英]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.