Python 如何以元组形式返回多个正则表达式值

Python 如何以元组形式返回多个正则表达式值,python,regex,re,Python,Regex,Re,我正在开发一个Python程序,它可以搜索收到的电子邮件并返回坐标。我试图创建一个正则表达式来从字符串中选择Lat/long值。(我对regex不熟悉) 下面是我用于测试的字符串之一的一个小示例: content = """ WorkLocationBoundingBox Latitude:30.556555Longitude:-97.659824 SecondLatitude:30.569138SecondLongitude:-97.650855

我正在开发一个Python程序,它可以搜索收到的电子邮件并返回坐标。我试图创建一个正则表达式来从字符串中选择Lat/long值。(我对regex不熟悉)

下面是我用于测试的字符串之一的一个小示例:

     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,可选择匹配
  • 纬度:
    按字面匹配
  • (?\d+(?:\。\d+)
    捕获组2,匹配可选的
    -
    然后将1+位与可选的小数部分匹配
  • \1经度:
    对组1中匹配内容的反向引用,并匹配
    经度:
  • (?\d+(?:\。\d+)
    捕获组3,匹配可选的
    -
    然后将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+)
请看,现在花时间来找出原因!谢谢你的帮助!一个非常彻底和有益的回答。再次感谢你的帮助!