2

こんにちは、タイプ 4-6 の部分文字列を 4,5,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 の使用。

これにはいくつかの正規表現ブードゥーまたは類似のものがありますか? どうもありがとう!

4

1 に答える 1

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引数 tore.subが引数として一致を受け取り、置換文字列を返す callable になることができるという事実を使用しています。

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)
于 2013-04-10T05:43:13.997 に答える