[英]Take first word after a regex match
我正在嘗試使用正則表達式從字符串中提取一些子字符串。 我的函數中有一個詞作為參數,目標是在匹配后提取下一個詞(我對詞的定義)。 我試過后視和其他一些邏輯,但我沒有得到結果,所以歡迎任何幫助。
例如,在第一種情況下,我在我的函數中輸入: **THttpServer**
23:25:04.805: INFO: THttpServer: transportTCPChanged(state: DISCONNECTED 2)
23:25:13.120: INFO: THttpServer: transportUDPOpened(state: Port 54)
預期結果:兩種情況下的transportTCPChanged
和transportUDPOpened
。
另一種情況,我有作為輸入CurrentUserConnection
23:25:16.622: INFO: CurrentUserConnection#1:RQ : subscribed(userID: 1)
23:25:16.622: INFO: CurrentUserConnection#8:RP : disconnected
預期結果:已subscribed, disconnected
。
我在 Notepad++ 上嘗試過的事情(后視變化取決於示例):
(?<=THttpServer)(\\w+)
: 無匹配(?<=THttpServer)(.*)
: 顯然返回所有句子,不是預期的匹配
我有點困惑,也許這甚至不可能? 還是我需要一些預處理?
您需要匹配:
在THttpServer
之后和任何非單詞字符直到單詞並使用(\\w+)
匹配和捕獲它。
例如你可以使用
THttpServer:\W*(\w+)
請參閱正則表達式演示。
細節
THttpServer:
- 文字子串\\W*
- 任何 0+ 個非單詞字符(\\w+)
- 捕獲組 1(稍后可通過m.group(1)
訪問):1 個或多個字字符。請參閱Python 演示:
import re
strs = ['23:25:04.805: INFO: THttpServer: transportTCPChanged(state: DISCONNECTED 2)',
'23:25:13.120: INFO: THttpServer: transportUDPOpened(state: Port 54)']
rx = re.compile(r'THttpServer:\W*(\w+)')
for s in strs:
m = rx.search(s)
if m:
print("Found '{}' in '{}'.".format(m.group(1), s))
輸出:
Found 'transportTCPChanged' in '23:25:04.805: INFO: THttpServer: transportTCPChanged(state: DISCONNECTED 2)'.
Found 'transportUDPOpened' in '23:25:13.120: INFO: THttpServer: transportUDPOpened(state: Port 54)'.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.