re.findall不将所有信息放在列表中

时间:2013-07-01 18:29:42

标签: python regex

我的信息用分号分隔,我试图把它全部放在一个列表中:

txt = Alert Level: 3; Rule: 5502 - Login session closed.; Location: mycomputer->/var/log/secure;Jul  1 14:22:25 MYCOMPUTER sshd[6470]: pam_unix(sshd:session): session closed for user root

当我使用这个表达式时:

result = re.findall('.*?;', txt)

我回来了:

result = [' Alert Level: 3;', ' Rule: 5502 - Login session closed.;', ' Location: MYCOMPUTER->/var/log/secure;']

我错过了最后一个分号之后的最后一点信息,我不知道如何抓住它并将其放在列表中。有什么想法吗?

由于

3 个答案:

答案 0 :(得分:4)

为什么不使用split

result = txt.split(";")

否则,如果你绝对想要正则表达式,我会使用:

result = re.findall('[^;]+', str)

答案 1 :(得分:0)

尝试:

.*?(;|$)

$是该行结尾的典型符号,因此(;|$)将是';'或行尾。

答案 2 :(得分:0)

当然,如果你的问题只是这个问题,你会比使用正则表达式更好地使用Python的分裂 -

但就你的表达而言,它必须通过“;”搜索或者行尾。不幸的是,行结尾是由$特殊字符表示的,用简单的[ ] frouping找不到 - 但它可以通过使用非捕获括号((?:))和“或”(|)的子正则表达式进行匹配,例如:re.findall(r".*?(?:;|$)", txt)