2017-02-14 2 views
0

, у меня есть несколько строк, например:Матч 2 группы чисел, разделенных специальными символами

N00E001 N00W001 N00E002

Что бы лучше регулярное выражение, чтобы найти обе группы чисел в каждой строке ?

Я не лучший с регулярным выражением. Вот что я сейчас работаю с: (\d+)[W|E](\d+).

+1

Так есть ли проблема с регулярным выражением? – Kasramvd

+1

Вам не нужно '' 'внутри опции (' [] '). – Jules

+0

Строки всегда изолированы или находятся внутри больших струн ('' blah blah N00E001 blah'')? Строки всегда содержат семь символов? Существуют ли строки, такие как '' N00X001'', которые вы не хотите сопоставлять? Если ваша строка всегда состоит из семи символов, то 'if s [3] в 'EW': numbers = s [1: 3] + s [4:]'. Если все строки хороши, вы можете отказаться от if-предложения. –

ответ

2
"(\d+)[W|E](\d+)" 

также соответствует "N00|001".

Так

"(\d+)[WE](\d+)" 

должны делать хорошо.

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

"\A[NS]\d{2}[WE]\d{3}\Z" 

Это будет соответствовать:

  • с N или S
  • следуют 2 цифры
  • с последующим E или W
  • , за которым следует 3 цифры

Весь матч должен быть полной строкой. "Location N00W001" не совпадают, например.

Тест

import re 

strings = ["N00E001", "N00W001", "N00E002"] 

pattern = re.compile("\A[NS]\d{2}[WE]\d{3}\Z") 

print all(pattern.match(string) for string in strings) 
# True 
Смежные вопросы