Skip to main content
 首页 » 编程设计

python之为什么我的 Python 正则表达式在空格之间不匹配

2024年10月24日29xiaohuochai

我想从 Linux auth.log 中提取登录信息并报告它,但在使用正则表达式提取相关信息时遇到问题。我认为由空格 (.*) 包围的组将匹配这些空格之间的完整文本段。对于第一个词和用户名,它工作正常,但对于 IP 地址,它会吐出从 IP 地址开始的整行文本。我错过了什么?

s='Accepted keyboard-interactive/pam for user101 from 10.19.36.76 port 36272 ssh2' 
s2='Postponed keyboard-interactive for user101 from 10.19.36.76 port 36303 ssh2 [preauth]' 
 
w = re.compile ("(.*) keyboard-interactive.*for (.*) from (.*) "); 
m = w.search(s2) 
if m: 
   print "login by:", m.group(2) 
   print "src ip  :", m.group(3) 
   print "status  :", m.group(1) 

输出:

login by: user101 
src ip  : 10.19.36.76 port 36303 ssh2 [preauth] 
status  : Postponed 

或者:

login by: user101 
src ip  : 10.19.36.76 port 36272 ssh2 
status  : Accepted 

请您参考如下方法:

w = re.compile ("(.*?) keyboard-interactive.*for (.*?) from (.*?) "); 
 
                    ^^                              ^^         ^^     

让你的正则表达式不贪婪