我會堅持以相同的符號,然後使用re.findall()
來獲取所有的比賽。例如
import re
def to_num_list(instr):
out = []
for m in re.finditer(r'(\d+)(?:-(\d+))?', instr):
if m.group(2) == None:
out.append(int(m.group(1)))
else:
start = int(m.group(1))
end = int(m.group(2))
out.extend(xrange(start, end + 1))
return out
這會給你處理imputs如"1 2 3 10-15"
以及能力。用法示例:
>>> to_num_list("0-6")
[0, 1, 2, 3, 4, 5, 6]
>>> to_num_list("10")
[10]
>>> to_num_list("1 3 5")
[1, 3, 5]
>>> to_num_list("1 3 5 7-10 12-13")
[1, 3, 5, 7, 8, 9, 10, 12, 13]
,並在輸入錯誤(這可能不一定是你想要的)跳躍:
>>> to_num_list("hello world 1 2 3")
[1, 2, 3]
>>> to_num_list("")
[]
>>> to_num_list("1 hello 2 world 3")
[1, 2, 3]
>>> to_num_list("1hello2")
[1, 2]
問題可以這樣做有一個更好的標題。如果你從確定的意見開始,應該用正則表達式來完成,你通常不會得到正確的答案。用*你想要做什麼來標題,而不是*你認爲你想做什麼。 –