Python 如何以元组形式返回多个正则表达式值
我正在开发一个Python程序,它可以搜索收到的电子邮件并返回坐标。我试图创建一个正则表达式来从字符串中选择Lat/long值。(我对regex不熟悉) 下面是我用于测试的字符串之一的一个小示例:Python 如何以元组形式返回多个正则表达式值,python,regex,re,Python,Regex,Re,我正在开发一个Python程序,它可以搜索收到的电子邮件并返回坐标。我试图创建一个正则表达式来从字符串中选择Lat/long值。(我对regex不熟悉) 下面是我用于测试的字符串之一的一个小示例: content = """ WorkLocationBoundingBox Latitude:30.556555Longitude:-97.659824 SecondLatitude:30.569138SecondLongitude:-97.650855
content = """
WorkLocationBoundingBox
Latitude:30.556555Longitude:-97.659824
SecondLatitude:30.569138SecondLongitude:-97.650855
"""
我提出了纬度:(\d+)(\d+)经度:(.*)
,我认为这接近我需要的,但它将30
和556555
分为不同的组。但是,-97.659824
被正确地放入了一个组中
我的理想预期结果如下:
[(30.556555, -97.659824, 30.569138, -97.650855)]
您可以使用3个捕获组,其中第一个组用于匹配单词“不久”或“纬度”
((?:Second)?)Latitude:(-?\d+(?:\.\d+)?)\1Longitude:(-?\d+(?:\.\d+)?)
捕获组1,可选择匹配((?:秒)?)
秒
按字面匹配纬度:
捕获组2,匹配可选的(?\d+(?:\。\d+)
然后将1+位与可选的小数部分匹配-
对组1中匹配内容的反向引用,并匹配\1经度:
经度:
捕获组3,匹配可选的(?\d+(?:\。\d+)
然后将1+位与可选的小数部分匹配-
['30.556555', '-97.659824', '30.569138', '-97.650855']
[('30.556555', '-97.659824'), ('30.569138', '-97.650855')]
不太严格的模式可能匹配经度或纬度之前的可选单词字符:
\w*Latitude:(-?\d+(?:\.\d+)?)\w*Longitude:(-?\d+(?:\.\d+)?)
在这种情况下,如果需要,还可以使用re.findall返回元组列表中的组值:
import re
pattern = r"\w*Latitude:(-?\d+(?:\.\d+)?)\w*Longitude:(-?\d+(?:\.\d+)?)"
s = ("WorkLocationBoundingBox\n"
"Latitude:30.556555Longitude:-97.659824\n"
"SecondLatitude:30.569138SecondLongitude:-97.650855")
print(re.findall(pattern, s))
输出
['30.556555', '-97.659824', '30.569138', '-97.650855']
[('30.556555', '-97.659824'), ('30.569138', '-97.650855')]
像这样尝试一下
纬度:(\d+(?:\.\d+))经度:(.*)
或者更精确的(?:秒)?纬度:(?\d+(?:\.\d+))(:秒)?经度:(?\d+(?:\.\d+)
请看,现在花时间来找出原因!谢谢你的帮助!一个非常彻底和有益的回答。再次感谢你的帮助!