1

我有一些这样的字符串:

新的 google.maps.LatLng(52.80359, -4.7127),

新的 google.maps.LatLng(53.80645306, -5.45455287),

新的 google.maps.LatLng(51.8035914546, -4.7123622894287),

我需要同时获得经度和纬度,因此每个数字都有一个正则表达式, - 符号需要尽可能包括在内。

我在网上尝试了一些工具,但似乎都没有一个像样的模式

4

3 回答 3

1

只需使用 grepgrep -oE '[-0-9]+\.[0-9]+'

$ echo "new google.maps.LatLng(52.80359, -4.7127)," | grep -oE '[-0-9]+\.[0-9]+'
52.80359 
-4.7127

$ echo "new google.maps.LatLng(53.80645306, -5.45455287)," | grep -oE '[-0-9]+\.[0-9]+'
53.80645306 
-5.45455287

$ echo "new google.maps.LatLng(51.8035914546, -4.7123622894287)," | grep -oE '[-0-9]+\.[0-9]+'
51.8035914546 
-4.7123622894287

Grep是用于将文件(或标准输出)中的行与特定模式匹配的命令行工具,-o它告诉 grep 在匹配的行的一部分上显示(默认情况下,grep 显示与给定模式匹配的整行)。-E告诉 grep 使用 grep 使用扩展的正则表达式

regexp模式[-0-9]匹配减号-digit以下+表示重复前一项或多次,即匹配abc123xyz123只是匹配我们必须转义的小数位,1因为单个匹配任何字符,然后匹配小数位后的任何数字再次使用。 \.\.regexp[0-9]+

有关更多信息,请参阅参考资料regular expressions

于 2012-11-08T19:38:18.007 回答
1

我会使用这种方法:

LatLng\((-*\d+\.*\d+),\s(-*\d+\.*\d+)\)

虽然它比您可能需要的更多匹配,但它将纬度放在捕获组 1 中,将经度放在捕获组 2 中,两者都不包括周围的括号和逗号。

在此处查看实际操作:http ://regexr.com?32od6

于 2012-11-08T19:39:35.323 回答
1

在 C# 中使用Regex.Match如下:

using System.Text.RegularExpressions;
...
Match match = Regex.Match(input, @"([-]?\d+(?:[.]\d+)?)\D+?([-]?\d+(?:[.]\d+)?)");
if (match.Success)
{
  string Lat = match.Groups[1].Value;
  string Lng = match.Groups[2].Value;
}
于 2012-11-08T19:42:38.570 回答