正则表达式在括号和逗号之间获取值

时间:2012-11-08 19:33:08

标签: regex linux unix grep

我有几个这样的字符串:

  

new google.maps.LatLng(52.80359,-4.7127),

     

new google.maps.LatLng(53.80645306,-5.45455287),

     

new google.maps.LatLng(51.8035914546,-4.7123622894287),

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

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

3 个答案:

答案 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;
}