我正在尝试使用正则表达式从字符串中提取一些子字符串。我在函数中有一个单词作为参数,目标是在匹配之后提取下一个单词(我对单词的定义)。我已经尝试了lookbehind和其他一些逻辑,但未能获得结果,因此欢迎您提供任何帮助。
例如,在第一种情况下,我在函数中输入**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
。
我在记事本++上尝试过的事情(根据示例,后向变化)
(?<=THttpServer)(\w+)
:没有匹配项
(?<=THttpServer)(.*)
:显然会返回所有句子,而不是预期的匹配结果
我有点困惑,也许不可能吗?还是需要一些预处理?
答案 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)'.