python re 标识符不适用于前瞻和后瞻

问题描述 投票:0回答:1

我有以下字符串

str = '2024-09-23 18:05:08,147 INFO  [WatchDog_191084]  (alloc:0MB, cpu:0%) 10      422'

我正在尝试提取方括号之间的数字。所以我正在尝试

identifier_test = re.search('(?<=\[)\d+(?=])',str)
print(identifier_test)

我什么也没得到,但如果我尝试

identifier_test = re.search('(?<=\[).+(?=])',str)
print(identifier_test.group())

它按预期工作并返回 WatchDog_191084。 如何只获取数字?

python regex-lookarounds python-re
1个回答
0
投票

在第一个模式中,没有任何内容与输入字符串的

WatchDog_
部分匹配。 Lookbehind 期望在数字之前找到一个
[
字符,但这不是它找到的,因此匹配失败。如果您的输入中始终包含
WatchDog_
,您可以将该部分设为后视:

re.search(r'(?<=\[WatchDog_)\d+(?=])',str)

如果您想在那里接受任何文本,事情会变得有点棘手。 Python 的

re
正则表达式引擎仅支持固定长度的后向查找,因此不允许使用
(?<=\[[^\]\d]*)
之类的内容。在这种情况下,使用像第二个这样的模式并通过一些后处理提取数字位将是最有意义的。

© www.soinside.com 2019 - 2024. All rights reserved.