如何用正则提取开头为8位数字空格加2位且不含TDS的行
行提取规则解决方案
核心正则表达式
你可以通过增加负向先行断言实现同时满足两个规则的匹配,最终正则如下:^(?!.*TDS)\d{8} \d{2}.*$
各部分规则说明:
^:锚定行的起始位置,确保规则从行首开始匹配(?!.*TDS):负向先行断言,校验整行范围内不存在TDS字符串,满足排除要求\d{8}:匹配行首的8位数字+空格规则\d{2}:匹配空格后紧跟的2位数字规则.*$:匹配该行剩余的所有字符直到行尾
该正则表达式兼容所有支持先行断言的正则引擎,可直接在Python、Java、JavaScript等编程语言的正则匹配逻辑中使用。
常用工具实现方案
如果是在Linux/macOS命令行环境下处理文件,可以用更简单的组合命令,可读性更高不容易出错:
# 先匹配开头规则,再反向过滤掉含TDS的行 grep '^[0-9]\{8\} [0-9]\{2\}' your_file.txt | grep -v 'TDS'
如果要单条正则实现,可以开启grep的Perl正则支持:
grep -P '^(?!.*TDS)\d{8} \d{2}' your_file.txt
测试匹配结果
针对你提供的测试数据,以上方案会输出符合要求的结果:
91298254 02/07/2021 91298254 3181753640RE,MAN-1 200,000.00 91298268 03/07/2021 91298268 3181753647RE,MAN-2 166,861.00
内容的提问来源于stack exchange,提问作者manjesh kumar
相关产品推荐
相关产品推荐

