用于提取字段的正则表达式

时间:2015-06-09 09:16:26

标签: python regex

我正在尝试编写匹配

的正则表达式

这是我的转储

Ack_ONE............................FAILED
[58] 0
[59] 0
[5A] 0
[5B] 0
dropball.....................................PASSED
nfrock_port@0x44A40000: Error: TX 0x00A9EFB6    
MAKEPIE.....................................FAILED

我正在尝试使用match命令提取以下内容。这样我就可以将match.groups()[0]的测试(Ack_ONE,dropball,Makepie)和match.groups()[1]中的结果(FAILED,PASSED,FAILED)。

Ack_ONE FAILED
dropball PASSED
Makepie FAILED

我正在使用以下正则表达式命令

match = re.search( r'\s*([a-zA-Z_0-9]+)............................(.*?)\n', line)

如何使用正则表达式删除/忽略.(点)并改进上述内容?

3 个答案:

答案 0 :(得分:1)

请注意,圆点表示“任何字符”,因此您的正则表达式匹配例如:

dropball....r34....(...dfsd.....6.....tyu....PASSED

如果要匹配文字点,则应该转义.

所以你可以:

match = re.search( r'\s*(\w+)\.{28}(.*?)\n', line)
  • \w匹配任何单词字符

  • \.{28}匹配28个点(您可以将其扩展为{x,y}以匹配xy点之间,或者如果您不关心如何可以出现许多点,您只需使用\.+)。如果您想忽略这些点,请使用\.*

答案 1 :(得分:0)

\s*([a-zA-Z_0-9]+)\.{5,}(.*?)(?:\n|$)

您可以将其与re.findall一起使用以获得结果。请参阅演示。

https://regex101.com/r/nS2lT4/35

import re
p = re.compile(r'\s*([a-zA-Z_0-9]+)\.{5,}(.*?)(?:\n|$)', re.MULTILINE)
test_str = "Ack_ONE............................FAILED\n[58] 0\n[59] 0\n[5A] 0\n[5B] 0\ndropball.....................................PASSED\nnfrock_port@0x44A40000: Error: TX 0x00A9EFB6    \nMAKEPIE.....................................FAILED"

re.findall(p, test_str)

答案 2 :(得分:0)

这是我解决问题的方法。

import re

text = '''
Ack_ONE............................FAILED
[58] 0
[59] 0
[5A] 0
[5B] 0
dropball.....................................PASSED
nfrock_port@0x44A40000: Error: TX 0x00A9EFB6    
MAKEPIE.....................................FAILED
'''

data = text.split('\n')
for item in data:
    if '...' in item:
        print re.findall(r'[^.]+.', item)

打印出来:

['Ack_ONE.', 'FAILED']
['dropball.', 'PASSED']
['MAKEPIE.', 'FAILED']