繁体   English   中英

正则表达式 python:仅查找第二个和第三个字符串模式

[英]Regular expression python: Find just second and third string pattern

对于以下文本,我想获得“错误:.....”的第二个和第三个模式(见粗体文本)。

基本上我需要从下面的文本中打印出来:

Error: Calculated last average: 150.34365623971, read last average: 132, Tolerance: 12

以下文字:

Error: Register 3.5.0 -------------- [Device type: Am500T_Elektra; Device Id: 00000000]

Error: Calculated last average: 150.34365623971, read last average: 132 -------------- [Device type: Am500T_Elektra; Device Id: 00000000]

Error: Tolerance: 12 -------------- [Device type: Am500T_Elektra; Device Id: 00000000]

我被困在这里:

re.compile(r'Error: (.+ -)').findall

任何提示或建议如何继续?

假设只有值改变:

regex = re.compile(r'Error: Calculated last average: \d+\.?\d+?, read last average: \d+, Tolerance: \d+')
re.match(regex, text) 

\d+\.?\d+? 表示一次或多次匹配任何数字,后跟一个可选的点(小数点),然后是另一个可选的数字匹配。 这样,即使平均值不是浮点数,它仍然会匹配。

对于其他值,我将正则表达式保留为\d+ ,假设它们始终是整数。 您可能还需要更改这些,视情况而定。

可以尝试使用 re.sub

>>> import re
>>> text = '''
... Error: Register 3.5.0 -------------- [Device type: Am500T_Elektra; Device Id: 00000000]
...
... Error: Calculated last average: 150.34365623971, read last average: 132 -------------- [Device type: Am500T_Elektra; Device Id: 00000000]
...
... Error: Tolerance: 12 -------------- [Device type: Am500T_Elektra; Device Id: 00000000]
... '''
>>>
>>> regex = re.compile(r"(?m)(?:\A\s*.*\s*|^Error:\s*|(\s*--+.*\s*(?=^Error:))|\s*--+.*\s*|(?![\S\s]*?(?:^Error:|--+))[\S\s]+)")
>>>
>>> print ( "Error: " + regex.sub(lambda x: ", " if (x.group(1)) else "", text ) )
Error: Calculated last average: 150.34365623971, read last average: 132, Tolerance: 12

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM