簡體   English   中英

在正則表達式匹配后取第一個單詞

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

預期結果:兩種情況下的transportTCPChangedtransportUDPOpened

另一種情況,我有作為輸入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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM