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

时间:2013-04-10 05:39:52

标签: 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。

是否有一些正则表达式的伏都教或类似的?非常感谢!

1 个答案:

答案 0 :(得分:3)

你可以这样做:

>>> 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'

这使用了re.subrepl参数可以是一个可调用的事实,它将匹配作为参数并返回替换字符串。

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)