Регулярное выражение для ряда пар долготы широты

Я получаю вход как это в моей программе

lat1, long1; lat2, long2; lat3, long3

пары долготы широты отделены колонками.

Нет я хочу утвердить этот вход так, чтобы я мог не получить неправильные данные.

Я создал регулярное выражение:

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

проблема, она только утверждает единственную пару не ряд пар, отделенных; поскольку я желаю.

Если бы вы могли бы помочь мне придумать выражение, чтобы утвердить мои данные, я был бы благодарен.

1
добавлено
Просмотры: 2
nl ja de
Пример @Asad действительных данных: (1) 33.44,34.43 (2) 33.44,34.43; 43.44,44.43; 53.54,34.43 Примеры недействительных данных: (1) 33.44,37.45,36.46 (2) 33.56,46.77; 56
добавлено автор khobab, источник
Пожалуйста, отправьте образец своих данных.
добавлено автор Asad Saeeduddin, источник
добавлено автор Dave Newton, источник

3 ответы

Я использовал бы следующий образец, который может также принять ценности как .2 наряду с 0.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
0
добавлено

Как насчет чего-то вроде этого?

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

Я примерил его Rubular.com (постоянная ссылка), с тестом натягивают как следующее:

-10,10;10.5,-10.337

Результат?

Match 1
1.  -10,10
Match 2
1.  10.5,-10.337
0
добавлено
Но это doesn' t, кажется, работают с этими данными: (1) 33.44,37.45,36.46 (2) 33.56,46.77; 56
добавлено автор khobab, источник
Средства, когда я сравниваю ita с вышеупомянутыми двумя ценностями. Это проверяет их как матч, где они не. BTW ответ выше все, что я искал;), спасибо за ваше беспокойство.
добавлено автор khobab, источник
Определите не, работают - it' ll только захватывают действительные ценности. @khobab:)
добавлено автор ninetwozero, источник

Ваша проверка выражения только одна пара в начале последовательности, сопровождаемой одной колонкой.

Можно попробовать это:

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

Это - ваш regex (без некоторых скобок inutiles) сопровождаемый 0 или больше раз колонкой и парой.

тест с вашими 4 примерами.

0
добавлено
Большое спасибо за ваше усилие, Это на самом деле работало.
добавлено автор khobab, источник