纬度/经度RegEx采用N-S和E-W格式

时间:2015-06-09 15:16:38

标签: c# regex

我问的是所有lat / lon正则表达式问题看起来类似的问题,但我的问题对我无法找到的格式有不同的看法。我只想接受这样的格式:

LAT: XX-XX.XX N|S
LON: XXX-XX.XX E|W

这是一个C#窗口文本条目,其中纬度和经度在不同的文本框中输入。

我希望格式在这些位置只接受1个短划线( - )和1个小数(即负值无效)并正确执行范围,以便输入所有位置值,例如:

LAT 0-90 North或South

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

LON 0-180 East or West

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创作的了解程度。

与往常一样,对此的任何帮助都将非常感激。

4 个答案:

答案 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 **晶格:由于我们没有180190晶格,我们可以将它们设为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