我有几个这样的字符串:
new google.maps.LatLng(52.80359,-4.7127),
new google.maps.LatLng(53.80645306,-5.45455287),
new google.maps.LatLng(51.8035914546,-4.7123622894287),
我需要获得经度和纬度,因此每个数字都有一个正则表达式, - 符号需要包括在可能的位置。
我在网上尝试了一些工具,但似乎没有一个好的模式
答案 0 :(得分:1)
只需使用grep grep -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
是用于匹配文件(或stdout)中的行与特定模式的命令行工具,-o
告诉grep显示在部分上匹配的行(默认情况下,grep显示与给定模式匹配的整行)。 -E
告诉grep使用grep来使用extended regexp。
regexp
模式[-0-9]
匹配减号-
或digit
以下+
表示重复上一项一次或多次 ie abc123xyz
匹配123
中的而不只是1
\.
与我们必须使用\
转义的小数位相匹配,因为.
regexp
1}}匹配[0-9]+
中的任何字符,然后再次使用regular expressions
匹配小数位后的任何数字。
有关{{1}}的详细信息,请参阅reference。
答案 1 :(得分:1)
我会用这种方法:
LatLng\((-*\d+\.*\d+),\s(-*\d+\.*\d+)\)
虽然它匹配的比你可能需要的多,但是它将纬度放在捕获组1中,将长度放在捕获组2中,两者都排除了周围的parantheses'和逗号。
在此处查看此行动:http://regexr.com?32od6
答案 2 :(得分: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;
}