regex python中的模式匹配

von4xj4u  于 2022-12-14  发布在  Python
关注(0)|答案(1)|浏览(198)

我已经给出了输出字符串的片段如下:

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+'
n8ghc7c1

n8ghc7c11#

如果要将前3行与模式仅与第一行匹配的部分匹配(没有前导和尾随空格字符):

\b\d\w\s+[\dA-F]+\s+[A-Z\d]+_[A-Z\d]+_[A-Z]+\s+[A-Z\d]+\s+[A-Z\d]+\s+(?:\d+\s+\d+|--[A-Z]+--)\s+[A-Z0-9]+\s+\d+\.\d%\s+\d{4}\s+[A-Za-z]+\b

添加的零件匹配:

  • (?:替代项的非捕获组
  • \d+\s+\d+匹配1+个数字、1+个空格字符和1+个数字
  • |
  • --[A-Z]+--匹配--之间的1个以上字符A-Z
  • )关闭非捕获组
  • \s+匹配1+个空格字符

请参见regex demo

请注意在您的模式中,您使用了*这样的量词,在这种情况下,它可以匹配零次或多次,因此_[A-Z0-9]*_也允许匹配__

相关问题