我有兩種不同型別的作業系統,它們以service tomcat status不同的方式回傳輸出。
我有一種方法來獲取 tomcat 行程 ID。
def find_pid(pattern,status):
m = re.match(pattern, status, re.DOTALL)
pid = m.groups(0)[0]
return(pid)
print(find_pid(pattern,status))
作業系統 type1service tomcat status 回傳
status = 'jsvc (pid 2164) is running...'
用于獲取 PID 的模式
pattern = '.*pid\s (\d ).*running.*'
print(find_pid(pattern,status)) >>> 2164
作業系統 type2service tomcat status回傳
status = '''tomcat.service - Tomcat Server
Loaded: loaded ( enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-11-18 13:33:00 PST; 1min 47s ago
Main PID: 2800 (jsvc)
CGroup: /system/tomcat.service
'''
用于獲取 PID 的模式
pattern = '.*PID:\s (\d ).*'
print(find_pid(pattern,status)) >>> 2800
現在我不想檢查作業系統的型別,也不想為不同的作業系統發送不同的模式。
無論我們正在檢查哪種型別的作業系統,該模式都應該能夠獲得 PID,
我通過將上述兩種模式與“|”結合起來創建了一個方法 操作員。
def find_pid(status):
pattern = '.*pid\s (\d ).*running.*|.*PID:\s (\d ).*'
m = re.match(pattern, status, re.DOTALL)
pid = m.groups(0)[0]
return(pid)
print(find_pid(status))
此方法不適用于任何一種狀態。
我需要一個匹配兩種狀態型別并從中回傳 PID 的模式。
PS:如果可能的話,我需要在 python 2 和 3 中都可以作業的解決方案。因為很少有測驗虛擬機在 python2 中運行,很少在 python3 環境中運行。(正在移植 2 到 3)。
uj5u.com熱心網友回復:
您可以使用不區分大小寫的匹配 flag re.I,:?因為不是兩個字串都:在 PID 之前有 a 并且(\d{1,5})對數字進行分組(最多 5 個,假定 os-limits)。
import re
os1_status = 'jsvc (pid 2164) is running...'
os2_status = '''tomcat.service - Tomcat Server
Loaded: loaded ( enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-11-18 13:33:00 PST; 1min 47s ago
Main PID: 2800 (jsvc)
CGroup: /system/tomcat.service
'''
for status in (os1_status, os2_status):
match = re.search(r'pid:?\s (\d{1,5})', status, re.I)
print(match.group(1))
uj5u.com熱心網友回復:
考慮到測驗用例:
jsvc (pid 2164) is running...
和
tomcat.service - Tomcat Server
Loaded: loaded ( enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-11-18 13:33:00 PST; 1min 47s ago
Main PID: 2800 (jsvc)
CGroup: /system/tomcat.service
我建議使用以下通用模式
r".*[Pp][Ii][Dd]:?\s (\d )"
請注意,我曾經[Pp][Ii][Dd]接受任何情況而不需要使用標志,如果您可以控制您可以使用的標志re.IGNORECASE,例如
import re
test1 = '''jsvc (pid 2164) is running...'''
test2 = '''tomcat.service - Tomcat Server
Loaded: loaded ( enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-11-18 13:33:00 PST; 1min 47s ago
Main PID: 2800 (jsvc)
CGroup: /system/tomcat.service'''
print(re.search(r".*pid:?\s (\d )", test1, re.IGNORECASE).group(1))
print(re.search(r".*pid:?\s (\d )", test2, re.IGNORECASE).group(1))
輸出
2164
2800
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/465812.html
上一篇:紅寶石和用正則運算式分割字串
下一篇:正則運算式不捕獲換行符
