2017-02-14 8 views
0

は、私はいくつかの文字列があると、特定の文字で区切られた数字の2グループ、:マッチなど

N00E001 N00W001 N00E002

がどのような各文字列に数字の両方のグループを見つける最適な正規表現になります?

私は正規表現で最高ではありません。ここで私は現在作業している:(\d+)[W|E](\d+)です。

+1

だからあなたの正規表現に問題があるのでしょうか? – Kasramvd

+1

オプション( '[]')の中に '|'は必要ありません。 – Jules

+0

文字列は常に孤立しているか、大きな文字列の中にありますか( ''blah blah N00E001 blah'')?文字列は常に7文字ですか?あなたがマッチしたくない '' N00X001 'のような文字列がありますか?あなたの文字列が常に7文字であれば 'EW 'のs [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または2桁の数字が続くSを
  • に続いて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