Python正则匹配:如何用单一正则匹配多格式输出行
问题描述
我有如下输出字符串片段:
1b 16 PM1733A_384_SED S657NE0R400049 MPP94E5Q 12 0 1BF1F72B0 99.9% 0208 Samsung PM1733a 3.84TB 1-WPD-SED 2b 17 PM1733_384_SED LPNE0M900631 EPK9DE5Q --EMT-- 1BF1F72B0 0.0% 0208 Samsung PM1733 3.84TB 1-WPD-SED 1b 18 PM1733A_30T_SED S6UANE0RB00321 MPP95E5Q --PNP-- DAFA00000 0.0% 0208 Samsung PM1733a 30.72TB 1-WPD-SED Discovered PNP 2b
我想写一个统一的Python正则表达式匹配前三类有效行(忽略最后仅2b的无效行)。观察到:
- 第一行第6、7列是
12 0 - 第二行第6列是
--EMT-- - 第三行第6列是
--PNP--
我尝试的正则无法覆盖所有情况:
pattern = r'\s+\d\w\s+[0-9A-F]*\s+[A-Z0-9]*_[A-Z0-9]*_[A-Z]*\s+[A-Z0-9]*\s+[A-Z0-9]*\s+[0-9]*\s+[0-9]\s+[A-Z0-9]*\s+[0-9][0-9].[0-9]%\s+[0-9]{4}\s+[A-Za-z]*\s+'
解决方案
可以通过兼容可变列的写法,写出统一匹配三类行的正则,核心是对第6、7列的两种情况做分支处理。优化后的正则如下:
import re pattern = r'^\d\w\s+\d+\s+[A-Z0-9_]+\s+[A-Z0-9]+\s+[A-Z0-9]+\s+(?:\d+\s+\d+|--[A-Z]+--)\s+[A-F0-9]+\s+\d+\.\d%\s+\d{4}\s+.+'
正则逐段说明
^\d\w:匹配行首的标识(如1b、2b),^确保从行开始匹配\s+\d+:匹配空格分隔的数字列(如16、17)[A-Z0-9_]+:匹配型号字符串(如PM1733A_384_SED)[A-Z0-9]+\s+[A-Z0-9]+:匹配连续两个序列号列(如S657NE0R400049、MPP94E5Q)(?:\d+\s+\d+|--[A-Z]+--):非捕获组,兼容两种情况:要么是两个数字(如12 0),要么是--XXX--格式的标识(如--EMT--、--PNP--)[A-F0-9]+:匹配十六进制字符串(如1BF1F72B0)\d+\.\d%:匹配百分比格式(如99.9%、0.0%)\d{4}:匹配四位数字(如0208).+:匹配剩余的描述文本,包括可选的Discovered PNP
匹配验证
用以下代码测试,可以精准匹配前三行有效内容:
output = """1b 16 PM1733A_384_SED S657NE0R400049 MPP94E5Q 12 0 1BF1F72B0 99.9% 0208 Samsung PM1733a 3.84TB 1-WPD-SED 2b 17 PM1733_384_SED LPNE0M900631 EPK9DE5Q --EMT-- 1BF1F72B0 0.0% 0208 Samsung PM1733 3.84TB 1-WPD-SED 1b 18 PM1733A_30T_SED S6UANE0RB00321 MPP95E5Q --PNP-- DAFA00000 0.0% 0208 Samsung PM1733a 30.72TB 1-WPD-SED Discovered PNP 2b""" matches = re.findall(pattern, output, re.MULTILINE) for match in matches: print(match)
输出结果:
1b 16 PM1733A_384_SED S657NE0R400049 MPP94E5Q 12 0 1BF1F72B0 99.9% 0208 Samsung PM1733a 3.84TB 1-WPD-SED 2b 17 PM1733_384_SED LPNE0M900631 EPK9DE5Q --EMT-- 1BF1F72B0 0.0% 0208 Samsung PM1733 3.84TB 1-WPD-SED 1b 18 PM1733A_30T_SED S6UANE0RB00321 MPP95E5Q --PNP-- DAFA00000 0.0% 0208 Samsung PM1733a 30.72TB 1-WPD-SED Discovered PNP
内容的提问来源于stack exchange,提问作者Santhosh Kumar HN
相关产品推荐
相关产品推荐

