Regex Python正则表达式在匹配后匹配n行
我有一个模式可以在带有pcre的regexr.com上正常工作,但是当我将它与python一起使用时,它与任何东西都不匹配。 模式是:Regex Python正则表达式在匹配后匹配n行,regex,python-3.x,regex-lookarounds,Regex,Python 3.x,Regex Lookarounds,我有一个模式可以在带有pcre的regexr.com上正常工作,但是当我将它与python一起使用时,它与任何东西都不匹配。 模式是: .*(?<=RSA SHA256:).*(?:.*\n){3}.* 您不必使用lookback,您可以匹配该值 要匹配以下三行,您可以切换换行符和*以省略最后一行* ^.*\bRSA SHA256:.*(?:\n.*){3} ^字符串的开头 *\bRSA SHA256:.*匹配RSA SHA256:,在前面有单词边界的字符串中 (?:\n.*){3}
.*(?<=RSA SHA256:).*(?:.*\n){3}.*
您不必使用lookback,您可以匹配该值 要匹配以下三行,您可以切换换行符和
*
以省略最后一行*
^.*\bRSA SHA256:.*(?:\n.*){3}
字符串的开头^
匹配*\bRSA SHA256:.*
,在前面有单词边界的字符串中RSA SHA256:
将换行符重复3次,然后匹配除换行符之外的任何字符3次(?:\n.*){3}
你的实际行为是什么?谢谢你,这很有帮助,但我不知道为什么我运行它时它不会打印任何内容。这个模式在正则表达式演示中确实有效。我已经用
re.M
更新了答案。你能检查一下它是否有效吗?我在本地环境中运行了一个名为secure
的文件和您的示例数据,得到了4行@J0876car,它启用了多行。您可以使用re.M
或re.MULTILINE
。如果re2:print('\n'','\n'.join(re2))和我得到我想要的,则会影响锚的含义。re2=re.findall(Accepted_publickey.strip(),items,re.M)。再次感谢你@J0876car确实,如果您使用re.findall,您将获得所有匹配项。regex101上还有一个代码生成器。这将使用re.finditer生成示例代码
Oct 21 17:27:21 localhost sshd[19772]: Accepted publickey for vagrant from 192.168.2.140 port 54614 ssh2: RSA SHA256:uDsE4ecSD9ElWQ5Q0fdMsbqEzOe0Hszilv8xhU6dT6M
Oct 21 17:27:22 localhost sshd[19772]: pam_unix(sshd:session): session opened for user vagrant by (uid=0)
Oct 21 17:27:22 localhost sshd[19772]: User child is on pid 19774
Oct 21 17:27:22 localhost sshd[19774]: Starting session: shell on pts/2 for vagrant from 192.168.2.140 port 54614 id 0
^.*\bRSA SHA256:.*(?:\n.*){3}
import re
Accepted_publickey = r'^.*RSA SHA256:.*(?:.*\n){3}.*'
f = open('secure')
items = f.read()
re1 = re.search(Accepted_publickey, items, re.M)
if re1:
print(re1.group())