python-3.x - 正则表达式捕获两个正则表达式模式之间的 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
解决方案
你得到误报是因为你使用了 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)
推荐阅读
- amazon-web-services - 将 AWS Elastic Beanstalk 实例配置为使用 2 个子网
- c - 使用双指针访问结构(指针)的成员
- amazon-web-services - Step Function 在 Map 步骤中嵌套 Map 步骤
- java - 是不是 MongoDB 不能与 JDA(Java Discord Api)一起使用?
- python - 指定时间(小时和分钟)时出现缩进错误
- ios - iPhone iOS 更新 14.7 后 Xcode 12.4 “不支持的操作系统版本”
- vue.js - 使用模板将每行中的按钮添加到 b 表
- java - 如何从具有多个节点的 Firebase 中检索数据?
- android - DatePickerDialog 按钮具有禁用样式
- r - 分类数据的真实与预测散点图