正则表达式匹配后输入第一个单词

时间:2019-03-25 10:05:18

标签: python regex

我正在尝试使用正则表达式从字符串中提取一些子字符串。我在函数中有一个单词作为参数,目标是在匹配之后提取下一个单词(我对单词的定义)。我已经尝试了lookbehind和其他一些逻辑,但未能获得结果,因此欢迎您提供任何帮助。

例如,在第一种情况下,我在函数中输入**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

我在记事本++上尝试过的事情(根据示例,后向变化)

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

我有点困惑,也许不可能吗?还是需要一些预处理?

1 个答案:

答案 0 :(得分:1)

您需要在:之后匹配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)'.