2017-02-14 18 views
0

說我有幾個字符串分隔的數字,如:第2個小組由特定字符

N00E001 N00W001 N00E002

什麼是要找到數字這兩個羣體中的每個串最好的正則表達式?

我不是最好的正則表達式。這是我目前的工作:(\d+)[W|E](\d+)

+1

那麼,有沒有與你的正則表達式的任何問題嗎? – Kasramvd

+1

您不需要選項內的'|'('[]')。 – Jules

+0

字符串是否始終是孤立的,或者它們在較大的字符串中找到('blah blah N00E001 blah'')?字符串是否總是七個字符?是否有像'N00X001'這樣的字符串,你不想匹配?如果你的字符串總是7個字符,那麼'EW'中的if [3]: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或A 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 
相關問題