纬度经度对的正则表达式
本文关键字:正则表达式 经度 纬度 | 更新日期: 2023-09-27 18:34:54
>我在谷歌地图上画一条线,然后创建一个字符串,比如:
(-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);
使用这个:^('-?'d+('.'d+)?),'s*('-?'d+('.'d+)?)$
(取自这里(。正则表达式的问题之一是您使用^
和$
两次。这些表示字符串的开始和结束,因此在您的情况下,您的正则表达式将永远不起作用。
上面的正则表达式应该提取数字并通过使用组使它们可用。
试一试
'((?<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();
试试这个:
Match match = Regex.Match(points, @"(-?'d+'.'d+)+", RegexOptions.IgnoreCase);
对于您的输入,它将产生 8 个结果,每个结果 = 经度或纬度
Match match = Regex.Match(points, @"((-?'d+'.'d+)+,?){2}", RegexOptions.IgnoreCase);
将产生 4 个结果,每个结果是一对形式的纬度、经度
试试这个:
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")