python - 正则表达式:只匹配一次
问题描述
我有一个包含多个 IP 地址的字符串以及一些随机的东西。例如像这样的一个:
21/Jun/2018:01:15:38 +0000 188.79.169.152 157.52.69.50 443 - - GET / 157.52.69.30 157.52.69.10
并得到了这个正则表达式:
[0-9]+(?:\.[0-9]+){3}
问题是这匹配多次,但我不需要。这个正则表达式缺少什么,所以它只会匹配一次?
谢谢,
解决方案
您可以使用re.match
which 匹配字符串开头的 ptrn 所以只需.*
在模式的开头添加 a ,我们就可以匹配从字符串开头到第一个 IP 地址的所有内容
>>> import re
>>> s = "21/Jun/2018:01:15:38 +0000 188.79.169.152 157.52.69.50 443 - - GET / 157.52.69.30 157.52.69.10"
>>>
>>> ptrn = r'.*?([0-9]+(?:\.[0-9]+){3})'
>>> re.match(ptrn, s).groups()[0]
'188.79.169.152'
推荐阅读
- android - 如何加载音频文件
- c# - 在列按钮上单击 7 次后如何禁用 datagridview
- javascript - 如何在反应中解析输入中的浮点值?
- azure-devops - 需要从另一个管道调用多个管道:如何触发 ADO 管道的资源
- node.js - 如何使用业力解决错误“必须使用导入来加载 ES 模块”
- r - ggplot2中facet_grid的虚线
- windows - .bat 文件在登录脚本中调用 .vbs 不起作用
- javascript - 如何为水平滚动菜单边缘的元素设置样式
- javascript - Angular Date 管道采用所有时区,包括 IST
- java - 为什么在visualvm中无法连接到远程服务器上的jstatd