2017-02-14 41 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 
相关问题