我试图从下面的行中提取过程ID和 “ERROR “一词。
July bad_process[12345]: ERROR
使用下面的代码,我可以打印过程id,但不能打印’ERROR’这个词。如果我返回0的索引,我得到这行。
[12345]: ERROR
如果我返回1的索引,我得到的只是进程ID。
123456
但返回索引2时,我没有得到’ERROR’字样。如何返回id和’ERROR’这个词?
def extract_pid(log_line):
regex = r"\[(\d+)\]: [A-Z]+"
result = re.search(regex, log_line)
if result is None:
return ""
return result[1]
print(extract_pid(log))
解决方案:
你应该添加第二个捕获组,并使用 重新查找所有 来寻找所有的匹配。
re.search(pattern, string, flags=0)
扫描字符串,寻找 首发地 其中正则表达式模式产生一个匹配,并返回一个对应的MatchObject实例。
import re
def extract_pid(log_line):
regex = r"\[(\d+)\]: ([A-Z]+)" # added grouping for 2nd group
matches = re.findall(regex, log_line)
return matches
print( extract_pid("""July bad_process[12345]: ERROR
July bad_process[42]: INFO""") )
输出。
[('12345', 'ERROR'), ('42', 'INFO')]