我已经给出了输出字符串的片段如下:
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
我想创建一个模式,将匹配上述输出。
如果您在第一行看到列[6,7],则输出为“12 0”。在第二行,第6列的输出为“--EMT--”,第三行的输出为--PNP--。我可以分别为第一行或第二行/第三行创建模式。但是,是否可以为3行创建一个模式?
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+'
1条答案
按热度按时间n8ghc7c11#
如果要将前3行与模式仅与第一行匹配的部分匹配(没有前导和尾随空格字符):
添加的零件匹配:
(?:
替代项的非捕获组\d+\s+\d+
匹配1+个数字、1+个空格字符和1+个数字|
或--[A-Z]+--
匹配--
之间的1个以上字符A-Z)
关闭非捕获组\s+
匹配1+个空格字符请参见regex demo。
请注意在您的模式中,您使用了
*
这样的量词,在这种情况下,它可以匹配零次或多次,因此_[A-Z0-9]*_
也允许匹配__
。