Python正则表达式匹配后匹配n行

时间:2019-10-21 20:39:53

标签: regex python-3.x regex-lookarounds

我有一个模式可以在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

1 个答案:

答案 0 :(得分:0)

您不必使用后向搜索,您可以匹配该值。

要匹配以下3行,您可以切换换行符和.*以省略最后一个.*

^.*\bRSA SHA256:.*(?:\n.*){3}
  • ^字符串的开头
  • .*\bRSA SHA256:.*与字符串中的RSA SHA256:匹配,并带有单词边界
  • (?:\n.*){3}重复3次换行,然后匹配除换行之外的所有字符3次

Regex demo

在您的代码中,您可以使用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())