Python正则前瞻后顾匹配失效,如何提取方括号内数字?
问题解决:提取方括号内的数字
你之前用(?<=\[)\d+(?=])匹配失败,是因为这个正则要求数字必须直接跟在[后面,且数字后直接是],但目标字符串里方括号内的内容是WatchDog_191084,数字前面有其他字符,不符合匹配规则,所以返回None。
下面提供两种可行的解决方案:
方案一:分步提取
先提取方括号内的完整内容,再从中提取数字:
import re str = '2024-09-23 18:05:08,147 INFO [WatchDog_191084] (alloc:0MB, cpu:0%) 10 422' # 提取方括号内的全部内容 bracket_content = re.search(r'(?<=\[).+?(?=])', str).group() # 从提取的内容中匹配数字 identifier = re.search(r'\d+', bracket_content).group() print(identifier) # 输出:191084
方案二:单个正则直接匹配
直接用正则捕获方括号内的数字部分,通过分组提取结果:
import re str = '2024-09-23 18:05:08,147 INFO [WatchDog_191084] (alloc:0MB, cpu:0%) 10 422' # 匹配方括号内的数字,用分组捕获 match_result = re.search(r'\[.*?(\d+).*?]', str) if match_result: print(match_result.group(1)) # 输出:191084
如果你的日志格式固定(方括号内都是WatchDog_加数字),还可以用更精准的正则:
match_result = re.search(r'\[WatchDog_(\d+)]', str)
内容的提问来源于stack exchange,提问作者Eliseo Di Folco
相关产品推荐
相关产品推荐

