[英]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.