首页 > 解决方案 > 正则表达式:只匹配一次

问题描述

我有一个包含多个 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}

问题是这匹配多次,但我不需要。这个正则表达式缺少什么,所以它只会匹配一次?

谢谢,

标签: pythonpython-3.xpython-2.7

解决方案


您可以使用re.matchwhich 匹配字符串开头的 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'

推荐阅读