我有数字值,比如:
a="1-5"
b="1,3"
c="1"
d="1,3-5"
e="1-3,5,7-8"
f="0,2-5,7-8,10,14-18"我想把它们变成完整的数字列表,如下所示:
a="1,2,3,4,5"
b="1,3"
c="1"
d="1,3,4,5"
e="1,2,3,5,7,8"
f="0,2,3,4,5,7,8,10,14,15,16,17,18"使用re模块,我可以得到数字:
喜欢1 5 in a
但我不能得到所有的数字
即。1 2 3 4 5 in a
我该怎么做?
发布于 2015-06-02 09:55:19
我认为没有必要在这里使用正则表达式:
def expand_ranges(string):
def expand(start, stop):
return ','.join(map(str, range(int(start), int(stop) + 1)))
return ','.join([expand(*d.split('-')) if '-' in d else d for d in string.split(',')])这
每个测试用例的演示:
>>> expand_ranges("1-5")
'1,2,3,4,5'
>>> expand_ranges("1,3")
'1,3'
>>> expand_ranges("1")
'1'
>>> expand_ranges("1,3-5")
'1,3,4,5'
>>> expand_ranges("1-3,5,7-8")
'1,2,3,5,7,8'
>>> expand_ranges("0,2-5,7-8,10,14-18")
'0,2,3,4,5,7,8,10,14,15,16,17,18'发布于 2015-06-02 09:57:05
如果设置了正则表达式,则可以将自定义函数作为repl参数传递给re.sub
>>> import re
>>> def replacer(match):
start, stop = map(int, match.groups())
return ','.join(map(str, range(start, stop+1)))
>>> re.sub('(\d+)-(\d+)', replacer, '1-3,5,7-8')
'1,2,3,5,7,8'发布于 2015-06-02 09:55:26
你必须以一种特殊的方式对待范围(1 "-“5)。试试建在"范围“里的蟒蛇。
祝你这次练习好运。
https://stackoverflow.com/questions/30592716
复制相似问题