2013-05-20 5 views
0

У меня есть следующие строки. Это LatLongs в градусах, минутах и ​​формат секунд, и может быть введена следующим образом:Соответствующие две одинарные кавычки или двойные кавычки

Option1: 25º 23" 40.6' or 
Option2: 25º 23'' 40.6' or 
Option3: 25 23 40.6 

С одной regx я хотел бы, чтобы соответствовать как струны, проблема для меня является соответствие с «(двойные кавычки) и ' «(две одинарные кавычки).
я следующий до сих пор.

^[+|-]?[0-9]{1,2}[\º| ][ ]?[0-9]{1,2}[\"|'{2}| ] 

Я строю и тестирование regx в терминале на Lunix (Ubuntu).
с выхода я получаю в терминале его соответствует «(двойная кавычка), но только ОДИН из« »(две одинарные кавычки).
Как я могу изменить regx, чтобы соответствовать «(двойные кавычки) и '«(две одинарные кавычки), в одном выражении?

Спасибо заранее.

+2

Степени могут идти до> 99, почему вы ограничиваете их двумя цифрами? –

ответ

0

Ваше регулярное выражение имеет проблемы. Например, [\"|'{2}| ] . спичек один ", |, ', {, 2, } или Попробуйте следующее:

^([+-]?\d+)º? ?\b(\d+)\b(?:''|\")? ?([\d.]+)'?$ 

Explana Тион:

^    # Start of string 
([+-]?\d+)  # Match an integer 
º?[ ]?   # Match a degree and/or a space (both optional) 
\b(\d+)\b  # Match a positive integer (entire number) 
(?:''|\")?[ ]? # Match quotes and/or space (all optional) 
([\d.]+)  # Match a floating point number 
'?    # Match an optional single quote 
$    # End of string 
+0

Это регулярное выражение позволяет 12.12.12.12 .... 12. секунд. Изменить окончательный термин на '\\ d \\ d? (\\. \\ d +)?' - стандартное регулярное выражение для десятичного числа – Bohemian

+0

@Bohemian: Да, это регулярное выражение не предназначено для проверки ввода. Если бы это было так, то пришлось бы проверять допустимые градусы/минуты/секунды. Это, по-видимому, не намерение OP, потому что это тоже не мое. –

+0

Достаточно справедливо, но вы можете пройти лишнюю милю и сделать ее более тугой; на один шаг ближе к проверке, которая, скорее всего, закончится как можно скорее. ** Поздравляю 100K! ** – Bohemian

0

Я думаю, что вы действительно хотите иметь с Regex выше

^[+|-]?[0-9]{1,2}º? ?[0-9]{1,2}(\"|'{2})? ?[0-9]{1,2}\.[0-9]'? 

Хотя это также соответствует странные вещи, как

25 23'' 40.6 

Ваш Regex использует пользовательские классы символов (разделы в [ и ]), которые могут соответствовать только одному символу. Вы можете объединить несколько символов по ( и ) и сделать эти группы необязательными с ?.

1

Заканчивать этот шаблон:

([+-]?\d{1,2}(?:\.\d{1,2})?.)\s*(\d{1,2}(?:\.\d{1,2})?[\S]*)\s*(\d{1,2}(?:\.\d{1,2})?'?) 

Это не зависит от какого-либо специального характера, включая поддержку до-2 цифр, наряду с решением вашей проблемы.

Смежные вопросы