繁体   English   中英

Python 故障排除中的正则表达式前瞻

[英]Regex lookahead in Python troubleshooting

试图获得一个正则表达式前瞻,它可以从数据集的每一行中提取 IP 地址。
示例数据(开始时拉取 IP 地址):

13.112.8.80 - rau5026 [21/Jun/2019:15:46:09 -0700] "HEAD /ubiquitous/transparent HTTP/1.1" 200 16928  
159.253.153.40 - - [21/Jun/2019:15:46:10 -0700] "POST /e-business HTTP/1.0" 504 19845  
136.195.158.6 - feeney9464 [21/Jun/2019:15:46:11 -0700] "HEAD /open-source/markets HTTP/2.0" 204 21149  

我的前瞻对于那些带有用户名的条目(例如第一行中的 rau5026)非常有效,但对于没有用户名的条目包含第一个破折号(第二个条目,以“-”作为用户名......所以对于第一个条目,它返回“13.112.8.80”,但第二个返回“159.253.153.40 -”

我正在使用的正则表达式是:

^.*(?=\s-\s)

您可以使用此正则表达式来匹配 IPv4 IP 地址。 您的正则表达式过于宽松。

(?:[0-9]{1,3}\.){3}[0-9]{1,3}

这将与以下内容匹配:

13.112.8.80
159.253.153.40
136.195.158.6

所有你需要的是:

^[^ ]+

它翻译成:

从不是空格字符的每一行的开头读取所有内容。

它是一个具有可预测和已知格式的日志文件,因此简单性更好。 您无需验证每行的开头是否为 IP 地址,因为它是有保证的。

https://regex101.com/r/f5kJf6/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM