从字符串正则表达式中提取坐标

时间:2020-10-02 05:30:10

标签: python regex coordinates

我正在尝试从reddit注释中提取各种格式的坐标。我希望能够提取Google地图支持的两种不同的坐标格式:

73.180633, -98.10080273°10'50.3"N 98°06'02.9"W

我可以使用以下表达式以第一种格式提取坐标:

([-+]?\d{1,2}[.]\d+),\s*([-+]?\d{1,3}[.]\d+)

但是,我无法成功找到或创建与第二种格式匹配的模式。

2 个答案:

答案 0 :(得分:1)

这将用于第二种格式:\d{1,3}°\d{1,3}'\d{1,3}\.\d\"[N|S]\s\d{1,3}°\d{1,3}'\d{1,3}\.\d\"[E|W]

请参阅:https://regex101.com/r/LN1igj/8

有两个非常相似的小组,显然不可能简化。参见How to capture multiple repeated groups?

要在一个正则表达式中捕获两种格式:(?:((?:[-+]?\d{1,2}[.]\d+),\s*(?:[-+]?\d{1,3}[.]\d+))|(\d{1,3}°\d{1,3}'\d{1,3}\.\d\"[N|S]\s\d{1,3}°\d{1,3}'\d{1,3}\.\d\"[E|W]))

请参阅:https://regex101.com/r/LN1igj/7

但这不再是真正可读的。我建议用代码解决这个问题。

答案 1 :(得分:0)

  • 纬度从90S 90N表示,经度从0到180表示。
  • 除秒,度和分钟外,还可以具有小数点,而不是其他子单位。
  • 它也可以仅用十进制数字表示,带有+/-

请在正则表达式下面尝试。

public function sales()
{
    return $this->hasMany('App\Models\Sale');
}

Demo

相关问题