Python regex不能正常工作

2024-05-19 12:35:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python很陌生,我正在做一个任务,我应该继续在regex上构建,但我遇到了一个句号。在

由于某些原因,当添加后面的部分时,一些正则表达式会崩溃并停止匹配之前匹配的一些字符串。在

我应该在这样的字符串上运行正则表达式:

Sep 15 04:34:02 li146-252 sshd[12130]: Failed password for invalid user ronda from 212.58.111.170

代码:

^{pr2}$

代码的结果:

['Sep 17 06:40:28 ', ' Failed password for invalid']

为什么我会有一些不该错过的东西。在

提前谢谢。在


Tags: 字符串代码for原因passwordsepregexfailed
3条回答

我认为您不希望对正则表达式的某些部分使用转换“|”,而应该为要从字符串中提取的所有部分定义substring()。 你到底想提取什么?除此之外,请避免空白,并将空格定义为“\s”,我不确定[]是否是正确的替代品。在

这里有一个简单的例子,说明你可以(我不知道你真正需要什么)得到什么(尽管没有优化):

([\D]{2,3}\s\d{2}\s\d{2}:\d{2}:\d{2})\s(li146-252)\s(sshd\[\d+\]):\s[\D\s]+((\d{1,3}\.){3}\d{1,3})

您的问题来自于您的|周围有多余的空间。使用这种语法,来自sshd[12130]12130将不匹配,因为它被括号包围,而不是空格。并且li146-252未被捕获,因为前导空格已用于捕获{}。在

因此,一个去掉空格的正则表达式应该做你想做的事情:

^(?:[A-z][a-z]{2} [0-9]{1,2} \d{2}:\d{2}:\d{2})|li146-252|[0-9]{5}|Failed password for invalid

另请删除括号内的多余字符。方括号用于指定多个字符(如[\d3]表示3的任何字母,或{}表示a和z之间的任何字符),或者如果要排除一个字符(如[^ ]表示除空格外的任何字符)

正则表达式总是很难读懂。试试在线Regex测试仪。这可能会给你更多关于错误的信息,你可以尝试不同的输入和表达式。以下是我的最爱:

在您的例子中,我认为您已经在正则表达式中添加了一些不应该存在的额外空格字符。空格也算作需要匹配的字符。在

在表达式124i前后也用括号隔开。有时很难知道插入|字符时使用了哪些部分。在

像这样:

'(?:^(?:[A-z][a-z]{2}[ ][0-9]{1,2}[ ][\d]{2}[:][\d]{2}[:][\d]{2}))|(?:li146-252)|(?:[0-9]{5})|(?:Failed password for invalid)'

相关问题 更多 >