我正在尝试编写匹配
的正则表达式这是我的转储
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)
如何使用正则表达式删除/忽略.
(点)并改进上述内容?
答案 0 :(得分:1)
请注意,圆点表示“任何字符”,因此您的正则表达式匹配例如:
dropball....r34....(...dfsd.....6.....tyu....PASSED
如果要匹配文字点,则应该转义.
。
所以你可以:
match = re.search( r'\s*(\w+)\.{28}(.*?)\n', line)
\w
匹配任何单词字符
\.{28}
匹配28个点(您可以将其扩展为{x,y}
以匹配x
和y
点之间,或者如果您不关心如何可以出现许多点,您只需使用\.+
)。如果您想忽略这些点,请使用\.*
。
答案 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']