正则表达式用于一系列纬度经度对

时间:2013-01-09 15:22:30

标签: regex

我在程序中收到这样的输入

  

LAT1,long1; LAT2,long2; lat3,long3

纬度经度对由列分隔。

不,我想验证此输入,以便我可能收不到错误的数据。

我创建了一个正则表达式:

((^(\-?\d+(\.\d+)?),(\-?\d+(\.\d+)?));?)

问题是它只验证一对不是由一对分隔的对;如我所愿。

如果你能帮我提出一个表达来验证我的数据,我将不胜感激。

3 个答案:

答案 0 :(得分:0)

你的表达式只检查一列所包含的字符串开头的一对。

你可以试试这个:

^\-?\d+(\.\d+)?,\-?\d+(\.\d+)?(;\-?\d+(\.\d+)?,\-?\d+(\.\d+)?)*$

这是你的正则表达式(没有一些括号的inutiles),是一列和一对的0或更多倍。

A test with your 4 examples.

答案 1 :(得分:0)

这样的事情怎么样?

(-?[\d\.]+,-?[\d\.]+)+;?+

我在Rubular.com (permalink)上尝试过,测试字符串如下:

-10,10;10.5,-10.337

结果

Match 1
1.  -10,10
Match 2
1.  10.5,-10.337

答案 2 :(得分:0)

我会使用以下模式,它也可以接受.20.2等值。

^-?(\d+(\.\d+)?|\.\d+),-?(\d+(\.\d+)?|\.\d+)(;-?(\d+(\.\d+)?|\.\d+),-?(\d+(\.\d+)?|\.\d+)){2}$

这是故障。

^                 # beginning of string
    -?                # optional minus sign
    (                 # either
        \d+(\.\d+)?   # an integer with an optional decimal part
        |             # or
        \.\d+         # a decimal number
    )
    ,                 # a comma
    -?                # optional minus sign
    (                 # either
        \d+(\.\d+)?   # an integer and an optional decimal part
        |             # or
        \.\d+         # a decimal number
    )
    (
        ;                 # a semicolon
        -?                # optional minus sign
        (                 # either
            \d+(\.\d+)?   # an integer and an optional decimal part
            |             # or
            \.\d+         # a decimal number
        )
        ,                 # a comma
        -?                # optional minus sign
        (                 # either
            \d+(\.\d+)?   # an integer and an optional decimal part
            |             # or
            \.\d+         # a decimal number
        )
    ){2}              # with 2 repetitions (of the pattern)
$                 # end of string