2

哪个是表示为 DDMMSS 的纬度和经度的正则表达式,其中 D 表示度数,M 表示分钟,S 表示秒,X 是表示北 (N)、南、东或西的字母?

例如,对于北纬 60 度 20 分 15 秒,它将是602015N,对于西经 40 度 50 分 0 秒,它将是0405000W。(请注意,纬度始终为 6 位,经度始终为 7 位)。

此外,请记住分钟和秒必须介于 00 和 59 之间,度数必须介于 0 和 90(纬度)和 0 和 180(经度)之间。

4

3 回答 3

5

试试这两个正则表达式:

纬度

(?:[0-8]\d|90)(?:[0-5]\d)(?:[0-5]\d)[NS]

正则表达式可视化

调试演示


经度

(?:0\d{2}|1[0-7]\d|180)(?:[0-5]\d)(?:[0-5]\d)[EW]

正则表达式可视化

调试演示

注意:
不要忘记\在您的 java 代码中转义,如果字母 (NSEW) 可以小写,则可以使用忽略大小写标志。

 String latitude=...
 final String LATITUDE_REGEX = "(?:[0-8]\\d|90)(?:[0-5]\\d)(?:[0-5]\\d)[NS]";
 // the same regex with ignore case flag activated
 // final String LATITUDE_REGEX = "(?i)(?:[0-8]\\d|90)(?:[0-5]\\d)(?:[0-5]\\d)[NS]"; 

 if (latitude.matches(LATITUDE_REGEX)) {
     // We have a latitude ...
 } else {
     // This is not a latitude...
 }
于 2013-11-07T15:40:33.150 回答
1

编辑:

以下 Stackoverflow QA 应该可以帮助您...

度分秒 (DMS) 正则表达式

^\s*([+-]?\d{1,3}\*?\s+\d{1,2}'?\s+\d{1,2}"?[NSEW]?|\d{1,3}(:\d{2}){2}\.\d[NSEW]\s*){1,2}$
于 2013-11-07T15:32:22.823 回答
0

在此代码中不考虑 Ex。1800000N。您需要添加以下代码:

在此处输入图像描述

lat:  ((900000)|([0-8]\d([0-5]\d)([0-5]\d)))[NS]

在此处输入图像描述

long: ((1800000)|(?:0\d{2}|1[0-7]\d|1800000)(?:[0-5]\d)(?:[0-5]\d))[EW]
于 2022-02-03T12:33:56.350 回答