Python 如何从字符串中解释数字列表?
我有如下数值:Python 如何从字符串中解释数字列表?,python,regex,Python,Regex,我有如下数值: 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模块,我可以获得以下数字: 像a中的15 但我无法得到完整的数字范围 例如12345ina 我如何才能做到这
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
模块,我可以获得以下数字:
像a中的15
但我无法得到完整的数字范围
例如12345
ina
我如何才能做到这一点?我认为这里没有必要使用正则表达式:
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'
我认为这里不需要使用正则表达式:
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'
必须以特殊的方式处理范围(1“-”5)。为此,请尝试内置“”的蟒蛇
祝您好运。您必须以特殊方式处理范围(1“-”5)。为此,请尝试内置“”的蟒蛇
祝您在本练习中好运。如果设置了正则表达式,则可以将自定义函数作为repl
参数传递给:
如果设置了正则表达式,则可以将自定义函数作为repl
参数传递给:
re.sub(r'(\d+)-(\d+),lambda m:','.join(str(i)表示范围内的i(int(m.group(1)),int(m.group(2))+1)),f)
@AvinashRaj足够正确,但我真的看不到使用lambda
@AvinashRaj的好处吗?它有100多个字符,使用lambda
意味着您无法轻松地重用该函数或单独测试它。re.sub(r'(\d+)-(\d+)、lambda m:'、join(str(i)表示范围内的i(int(m.group(1))、int(m.group(2))、lambda)
@AvinashRaj确实如此,但我真的看不到使用da
@AvinashRaj的好处吗?它有100多个字符,使用lambda
意味着您无法轻松重用该函数或单独测试它。