簡體   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