我有一个模式可以在regexr.com上使用pcre正常工作,但是当我将其与python一起使用时,它什么都不匹配。 模式是:
.*(?<=RSA SHA256:).*(?:.*\n){3}.*
,它与网站上的数据匹配,但是当我在python脚本上运行它时却没有。 目标是匹配“接受的公钥”和接下来的3行。 谢谢!
以下脚本:
import re
Accepted_publickey=r'.*(?<=RSA SHA256:).*(?:.*\n){3}.*'
file=open('secure')
for items in file:
re1=re.search(Accepted_publickey,items)
if re1:
print(re1.group())
实际数据是:
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
答案 0 :(得分:0)
您不必使用后向搜索,您可以匹配该值。
要匹配以下3行,您可以切换换行符和.*
以省略最后一个.*
^.*\bRSA SHA256:.*(?:\n.*){3}
^
字符串的开头.*\bRSA SHA256:.*
与字符串中的RSA SHA256:
匹配,并带有单词边界(?:\n.*){3}
重复3次换行,然后匹配除换行之外的所有字符3次在您的代码中,您可以使用read():
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())