我有一些这样的字符串:
新的 google.maps.LatLng(52.80359, -4.7127),
新的 google.maps.LatLng(53.80645306, -5.45455287),
新的 google.maps.LatLng(51.8035914546, -4.7123622894287),
我需要同时获得经度和纬度,因此每个数字都有一个正则表达式, - 符号需要尽可能包括在内。
我在网上尝试了一些工具,但似乎都没有一个像样的模式
只需使用 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
以下+
表示重复前一项或多次,即匹配abc123xyz
不123
只是匹配我们必须转义的小数位,1
因为单个匹配任何字符,然后匹配小数位后的任何数字再次使用。 \.
\
.
regexp
[0-9]+
有关更多信息,请参阅参考资料regular expressions
。
我会使用这种方法:
LatLng\((-*\d+\.*\d+),\s(-*\d+\.*\d+)\)
虽然它比您可能需要的更多匹配,但它将纬度放在捕获组 1 中,将经度放在捕获组 2 中,两者都不包括周围的括号和逗号。
在此处查看实际操作:http ://regexr.com?32od6
在 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;
}