纬度经度对的正则表达式

3

我在谷歌地图上画了一条线,然后创建了一个字符串,如下所示:

(-25.368819800291383,130.55809472656256)(-25.507716386730266,131.05797265625006) (-24.89637614190406,131.49193261718756)(-24.582068950590272,130.31090234375006)

第一个值是纬度,第二个是经度。我将该字符串分配给隐藏字段值,以便在服务器上访问它。

如何检索纬度和经度数字?

我试过以下代码:

 Match match = Regex.Match(points, @"(^(0|(-(((0|[1-9]\d*)\.\d+)|([1-9]\d*))))$,^(0|(-(((0|[1-9]\d*)\.\d+)|([1-9]\d*))))$)*", RegexOptions.IgnoreCase);

可能与https://dev59.com/RnA75IYBdhLWcg3wAUJ9相同。 - Likurg
我该如何获取纬度和经度数字?- 你不需要使用正则表达式来完成这个任务。我认为直接使用String.Split会更快。 - Security Hound
@Ramhound。一些字符串操作听起来也是可行的。但在分割后,您仍然需要进行更多的解析,对吧? - buckley
4个回答

2
使用以下正则表达式:^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$(来自这里)。您的正则表达式存在一个问题,即您两次使用了^$。它们表示字符串的开头和结尾,因此在您的情况下,正则表达式永远无法正常工作。
上面的正则表达式应该提取数字并通过使用组使其可用。

1

试一试这个

\((?<lat>[-\d.]+),(?<long>[-\d.]+)\)

我喜欢在这里使用命名组。要仅获取纬度,请使用

    Regex regexObj = new Regex(@"\((?<lat>[-\d.]+),(?<long>[-\d.]+)\)");
    Match matchResult = regexObj.Match(subjectString);
    while (matchResult.Success) {
        Console.WriteLine(matchResult.Groups["lat"].Value));
        matchResult = matchResult.NextMatch();

0

试试这个:

import re
p = re.compile('([+-]*\d*[\.]*\d*), ([+-]*\d*[\.]*\d*)')
t = int(input())
for i in range(t):
    try:
        z = str(input())
        z = z[1:len(z)-1]
        zz = re.findall(p, z)
        zz = zz[0]
        x = zz[0]
        y = zz[1]
        if(x[0] == '+' or x[0] == '-'):
            x = x[1:]
        if(y[0] == '+' or y[0] == '-'):
            y = y[1:]
        if(x[len(x)-1] == '.' or y[len(y)-1] == '.'):
            print("Invalid")
            continue
        if((len(x) > 1 and x[0] == '0' and x[1] != '.') or (len(y) > 1 and y[0] == '0' and y[1] != '.')):
            print("Invalid")
            continue
        x = float(x)
        y = float(y)
        if(x >= -90.0 and x <= 90.0 and y >= -180.0 and y <= 180.0):
            print("Valid")
        else:
            print("Invalid")
    except:
        print("Invalid")

0

试试这个:

Match match = Regex.Match(points, @"(-?\d+\.\d+)+", RegexOptions.IgnoreCase);

对于您的输入,它将产生8个结果,每个结果=经度或纬度

Match match = Regex.Match(points, @"((-?\d+\.\d+)+,?){2}", RegexOptions.IgnoreCase);

将返回4个结果,每个结果都是一个由纬度,经度组成的对。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接