我问的是所有lat / lon正则表达式问题看起来类似的问题,但我的问题对我无法找到的格式有不同的看法。我只想接受这样的格式:
LAT: XX-XX.XX N|S
LON: XXX-XX.XX E|W
这是一个C#窗口文本条目,其中纬度和经度在不同的文本框中输入。
我希望格式在这些位置只接受1个短划线( - )和1个小数(即负值无效)并正确执行范围,以便输入所有位置值,例如:
00-00.00 N valid
5-00.00 N invalid
05-00.00 N valid
90-00.00 N valid
89-59.99 S valid
90-60.00 S invalid
91.00.00 N invalid
0-0.0 E invalid
15-00.00 E invalid
015.00.00 E valid
180-00.00 E valid
180-01.00 E invalid
179-59.99 W valid
179-60.00 W invalid
181-00.00 W invalid
我知道如何逐位进行,例如Latitude: [0-9] [0-9] - [0-5] [0-9]。[0-9] [0-9] [N | S]
这是我对RegEx创作的了解程度。
与往常一样,对此的任何帮助都将非常感激。
答案 0 :(得分:3)
我的建议是
String patternLatitude = @"^(90\-00\.00)|([0-8]\d\-[0-5]\d\.\d\d) (N|S)$";
String patternLongitude = @"^(180\-00\.00)|((1[0-7]\d)|(0\d\d)\-[0-5]\d\.\d\d) (W|E)$";
提供给定的例子
015.00.00 E valid
实际上应该是无效的。更多测试示例(全部无效)
090-00.01 N
180-00.01 E
190-00.00 E
200-00.00 E
说明:
纬度:
90-00.00是特殊情况(唯一可能的90度值),对于其他度数值,我们可以放下[0..8]\d
;分钟是[0..5]\d
,小数只是两位数:\d\d
。
经度:180-00.00
是特殊情况(180度唯一的可能性);第二种情况1 **晶格:由于我们没有180
或190
晶格,我们可以将它们设为1[0-7]\d
;最后,如果一个弧度从0开始,它可以有任何两位数:0\d\d
。分钟及其小数与Lattitude案例中的相同。
答案 1 :(得分:0)
要将度数限制为0-90 / 0-180,将秒数限制为0-0 / 59-99,我会选择这些正则表达式:
#Latitude:
(([0-8]\d)-(0\d|[1-5]\d)\.\d\d|90-00.00)\s[NS]
#Longitude:
((0\d\d|1[0-7]\d)-(0\d|[1-5]\d)\.\d\d|180-00.00)\s[EW]
答案 2 :(得分:0)
以下内容将为您提供匹配纬度的正则表达式,以及捕获组以启用对degs / mins / secs和N / S值的访问:
(([0-8]\d)[-.]([0-5]\d)\.(\d\d)|(90[-.]00\.00)) ([N|S])
E / W也一样:
((0\d\d|1[0-7]\d)[-.]([0-5]\d)\.(\d\d)|(180[-.]00\.00)) ([E|W])
答案 3 :(得分:0)
这可能很难看......但它有效。
# @"(?:(?:(?:(?:0\d|[1-8]\d)(?=-\d\d\.\d\d[ ][NS])|(?:0\d\d|1[0-7]\d)(?=-\d\d\.\d\d[ ][EW]))-(?:(?:(?:0\d|[1-5]\d)\.\d\d)))|(?:(?:90(?=-\d\d\.\d\d[ ][NS])|180(?=-\d\d\.\d\d[ ][EW]))-00\.00))[ ][NSEW]"
(?: #
(?: # =============
(?: #
(?: # LAT: 00 to 89 North or South
0 \d #
| [1-8] \d #
) #
(?= - \d\d \. \d\d [ ] [NS] )
| # or,
(?: # LON: 000 to 179 East or West
0 \d\d #
| 1 [0-7] \d #
) #
(?= - \d\d \. \d\d [ ] [EW] )
) #
#
- # -
#
(?: #
(?: #
(?: # 00 to 59
0 \d #
| [1-5] \d #
) #
\. # .
\d\d # 00 to 99
) #
) #
) #
| # or,
(?: # =============
(?: #
90 # LAT: 90 North or South
(?= - \d\d \. \d\d [ ] [NS] )
| # or,
180 # LON: 180 East or West
(?= - \d\d \. \d\d [ ] [EW] )
) #
- 00 \. 00 # - 00.00
) #
) #
[ ] # =============
[NSEW] # N,S,E,W