我是 python 的新手,我正在处理一个我应该继续构建正则表达式的任务,但我遇到了一个句号。
由于某些原因,在添加后面的部分时,一些正则表达式会崩溃并停止匹配之前匹配的一些字符串。
我应该在看起来像这样的字符串上运行正则表达式:
Sep 15 04:34:02 li146-252 sshd[12130]: Failed password for invalid user ronda from 212.58.111.170
代码:
#!/usr/bin/python
import re
with open('livehack.txt', 'r') as file:
for line in file:
dateString = re.findall('^(?:[A-z][a-z]{2}[ ][0-9]{1,2}[ ][\d]{2}[:][\d]{2}[:][\d]{2}) | li146-252 | ?:[0-9]{5} | Failed password for invalid', line)
print dateString
代码的结果:
['Sep 17 06:40:28 ', ' Failed password for invalid']
如您所见,缺少一些应该捕获的东西,我不知道为什么。
提前致谢。
请您参考如下方法:
正则表达式总是难以阅读。试试在线 Regex 测试器。这可能会为您提供有关问题所在的更多信息,您可以尝试不同的输入和表达式。这些是我的最爱:
在你的情况下,我认为你已经在正则表达式中添加了一些不应该存在的额外空格字符。空格也算作一个需要匹配的字符。
我还会在用 | 分隔的表达式周围添加括号。有时很难知道插入 | 时使用了哪些部分性格。
像这样:
'(?:^(?:[A-z][a-z]{2}[ ][0-9]{1,2}[ ][\d]{2}[:][\d]{2}[:][\d]{2}))|(?:li146-252)|(?:[0-9]{5})|(?:Failed password for invalid)'
