用Python正则表达式从一个匹配项中打印出2个项目。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Python正则表达式从一个匹配项中打印出2个项目。相关的知识,希望对你有一定的参考价值。

我试图从下面的行中提取过程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 - 文档:

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')]

以上是关于用Python正则表达式从一个匹配项中打印出2个项目。的主要内容,如果未能解决你的问题,请参考以下文章

学习正则表达式笔记

Python全栈_Day11_grep和正则表达式

使用正则表达式从python中的列表项中删除子字符串

python 正则表达式如何截取字符串中间的内容

Python中正则表达式的一些匹配规则

Python:如何打印正则表达式匹配的字符串?