0

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

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

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

谢谢

4

3 回答 3

4

你为什么不使用split呢?

result = txt.split(";")

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

result = re.findall('[^;]+', str)
于 2013-07-01T18:35:07.877 回答
0

当然,如果您的问题只是这个,那么使用 Python 的 split 比使用正则表达式更好 -

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

于 2013-07-01T18:36:52.547 回答
0

尝试:

.*?(;|$)

$是行尾的典型符号,所以(;|$)要么是';' 或行尾。

于 2013-07-01T18:34:59.770 回答