2013-04-10 37 views
2

您好我想優雅地拓展型4-6的子串4,5,6在一個更大的串像展開某些子優雅較大的字符串中的python

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

只是使用「」作爲分隔符來字符串分割成陣列,然後通過元件的陣列進行迭代。如果將包含「 - 」提取兩個數字並插入給定間隔的擴展版本。 – 2013-04-10 05:43:19

+0

@MartinV .:請注意,似乎有兩種分隔符。 – georg 2013-04-10 06:58:56

回答

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' 

它使用的事實,repl參數re.sub可以是可調用的是把參數作爲匹配,並返回替換字符串。然後

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) 
+0

如果將括號放在模式的'd +'部分,然後使用'start,end = match.groups()',則可能簡化函數。 – Blckknght 2013-04-10 05:50:01

+0

@Blckknght更新。謝謝。 – Bakuriu 2013-04-10 05:53:19

+0

@JanneKarila Ups!固定。 – Bakuriu 2013-04-10 08:45:44

相關問題