Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,在较大的字符串中优雅地展开某些子字符串_Python_Regex - Fatal编程技术网

在python中,在较大的字符串中优雅地展开某些子字符串

在python中,在较大的字符串中优雅地展开某些子字符串,python,regex,Python,Regex,嗨,我想优雅地将类型4-6的子字符串扩展为一个更大的字符串,如 s = "235:2,4,6-9,12,14-19;240:3,5-9,10;245:4,9,10-15,18" print expand(s) 235:2,4,6,7,8,9,12,14,15,16,17,18,19;240:3,5,6,7,8,9,10;245:4,9,10,11,12,13,14,15,18 使用Python 是否有一些regexp巫毒或类似的?非常感谢 您可以执行以下操作: >>> im

嗨,我想优雅地将类型4-6的子字符串扩展为一个更大的字符串,如

s = "235:2,4,6-9,12,14-19;240:3,5-9,10;245:4,9,10-15,18"

print expand(s)
235:2,4,6,7,8,9,12,14,15,16,17,18,19;240:3,5,6,7,8,9,10;245:4,9,10,11,12,13,14,15,18
使用Python

是否有一些regexp巫毒或类似的?非常感谢

您可以执行以下操作:

>>> import re
>>> def repl(match):
...     start, end = match.groups()
...     return ','.join(str(i) for i in range(int(start), int(end)+1))
... 
>>> re.sub(r'(\d+)-(\d+)', repl, "235:2,4,6-9,12,14-19;240:3,5-9,10;245:4,9,10-15,18")
'235:2,4,6,7,8,9,12,14,15,16,17,18,19;240:3,5,6,7,8,9,10;245:4,9,10,11,12,13,14,15,18'
这使用了一个事实,即
repl
参数to可以是一个可调用的参数,它将匹配项作为参数并返回替换字符串

expand(s)
功能将是:

import re

def repl(match):
    start, end = match.groups()
    return ','.join(str(i) for i in range(int(start), int(end)+1))

def expand(s):
    return re.sub('(\d+)-(\d+)', repl, s)

只需使用“,”作为分隔符,将字符串拆分为数组,然后遍历元素数组。如果包含“-”,则提取两个数字并插入给定间隔的扩展版本。@MartinV:注意,似乎有两种分隔符。如果在模式的
d+
部分周围加上括号,然后使用
start,end=match.groups()
@Blckknght Updated,则可以稍微简化函数。谢谢,为什么投票被否决了?我相信这正好回答了OP的问题,所以无论谁投了反对票,请给你一个解释。你认为这不仅是一个好的解决方案,而且是完全错误的(至于何时投反对票的常见问题)。