我有字符串
"<Request 'http://127.0.0.1:5000/findrisk?latitude=32.7766642&longitude=-96.79698789999998' [GET]>"
我正在尝试获取“纬度= 32.7766642”和“经度= -96.79698789999998”
我认为这会起作用:
re.findall('(latitude|longitude)=-?\d+.\d+', req)
基本上是纬度或经度,后跟一个等号,然后是一个可选的负号,然后是一个或多个数字,然后是一个句点,然后是一个或多个数字,但这将返回
['latitude', 'longitude']
我已经尝试过在线正则表达式提取器,并且它们正在正确提取“ latitude = 32.7766642”和“ longitude = -96.79698789999998”,但python的re库不是。为什么会这样?
答案 0 :(得分:0)
您仅捕获组中的标签,并尝试捕获类似这样的值:
print(re.findall('(latitude|longitude)=(-?\d+.\d+)', req))
这将返回元组列表:
[('latitude', '32.7766642'), ('longitude', '-96.79698789999998')]
完整示例:
import re
req ="<Request 'http://127.0.0.1:5000/findrisk?
latitude=32.7766642&longitude=-96.79698789999998' [GET]>"
print(re.findall('(latitude|longitude)=(-?\d+.\d+)', req))
答案 1 :(得分:0)
将'latitude=-?\d+\.\d+|longitude=-?\d+\.\d+'
模式与findall
一起使用会为您提供所需列表:
import re
req = "<Request 'http://127.0.0.1:5000/findrisk?latitude=32.7766642&longitude=-96.79698789999998' [GET]>"
print(re.findall('latitude=-?\d+\.\d+|longitude=-?\d+\.\d+', req))
# ['latitude=32.7766642', 'longitude=-96.79698789999998']
答案 2 :(得分:0)
使用python时,正则表达式的问题是假定此处的括号是捕获表达式,而不是按照您希望的方式分组。因此,您真正想要的是捕获完整表达式,但 group 却不捕获关键字纬度或经度。
从Python re模块文档中,
(?:...)正则括号的非分组版本。
这就是您想要的。因此您的代码应如下所示:
re.findall('((?:latitude|longitude)=-?\d+.\d+)', req)
请注意,我正在捕获整个内容,并按照文档中的非分组括号进行分组。在我的系统上,这给了我想要的结果:
['latitude=32.7766642', 'longitude=-96.79698789999998']
答案 3 :(得分:0)
您可以按照其他答案中所述更改正则表达式。但是您也可以使用re.finditer()
和re.group()
来获取想要的行为:
[x.group() for x in re.finditer('(latitude|longitude)=-?\d+.\d+', req)]
然后,您可以更好地控制要分组的内容。 .group()
返回子组,没有参数或参数0
,这意味着只返回整个匹配项。