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