我的信息用分号分隔,我试图把它全部放在一个列表中:
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;']
我错过了最后一个分号之后的最后一点信息,我不知道如何抓住它并将其放在列表中。有什么想法吗?
由于
答案 0 :(得分:4)
为什么不使用split
?
result = txt.split(";")
否则,如果你绝对想要正则表达式,我会使用:
result = re.findall('[^;]+', str)
答案 1 :(得分:0)
尝试:
.*?(;|$)
$
是该行结尾的典型符号,因此(;|$)
将是';'或行尾。
答案 2 :(得分:0)
当然,如果你的问题只是这个问题,你会比使用正则表达式更好地使用Python的分裂 -
但就你的表达而言,它必须通过“;”搜索或者行尾。不幸的是,行结尾是由$
特殊字符表示的,用简单的[ ]
frouping找不到 -
但它可以通过使用非捕获括号((?:)
)和“或”(|
)的子正则表达式进行匹配,例如:re.findall(r".*?(?:;|$)", txt)