在正则表达式匹配后取第一个单词

2024-09-23 22:20:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用正则表达式从字符串中提取一些子字符串。我的函数中有一个单词作为参数,目标是在匹配之后提取下一个单词(我对单词的定义)。我尝试了lookback和其他一些逻辑,但是没有得到结果,所以欢迎任何帮助。你知道吗

例如,给定第一种情况,我在函数中输入了:**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++上尝试过的东西(lookback根据示例而变化):

(?<=THttpServer)(\w+):没有匹配项 (?<=THttpServer)(.*):显然返回所有句子,而不是预期的匹配

我有点困惑,也许这根本不可能?或者我需要一些预处理?你知道吗


Tags: 函数字符串info参数情况单词statesubscribed
1条回答
网友
1楼 · 发布于 2024-09-23 22:20:21

您需要在THttpServer之后匹配:,并将任何非单词字符匹配到单词,然后用(\w+)匹配并捕获它。你知道吗

例如,您可以使用

THttpServer:\W*(\w+)

参见regex demo。你知道吗

细节

  • THttpServer:-文字子串
  • \W*-任何0+个非单词字符
  • (\w+)-捕获组1(稍后可通过m.group(1)访问):1个或多个单词字符。你知道吗

参见Python demo

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)'.

相关问题 更多 >