在Python中扩展正则表达式

use*_*986 0 python regex

我的程序采用正则表达式来描述一组设备.例如,

--device=dev{01,02}{nyc}.hukka.com 
Run Code Online (Sandbox Code Playgroud)

应扩展到dev01nyc.hukka.com和dev02nyc.hukka.com

如何re在Python中使用该模块来扩展用户提供的正则表达式以完成我可以使用的字符串?我使用的是Python 2.4.

unu*_*tbu 6

如果我们重新敲击大括号,我们得到:

In [7]: re.split(r'\{(.*?)\}',userstring)
Out[7]: ['--device=dev', '01,02', '', 'nyc', '.hukka.com']
Run Code Online (Sandbox Code Playgroud)

列表中的每个其他项都来自内部大括号,我们接下来需要在逗号上拆分:

In [8]: [ part.split(',') if i%2 else [part]  for i,part in enumerate(re.split(r'\{(.*?)\}',userstring)) ]
Out[8]: [['--device=dev'], ['01', '02'], [''], ['nyc'], ['.hukka.com']]
Run Code Online (Sandbox Code Playgroud)

现在我们可以使用itertools.product来枚举这些可能性:

import re
import itertools

userstring = '--device=dev{01,02}{nyc}.hukka.com'

for x in itertools.product(*[ part.split(',') if i%2 else [part]  for i,part in
                              enumerate(re.split(r'\{(.*?)\}',userstring)) ]):
    print(''.join(x))
Run Code Online (Sandbox Code Playgroud)

产量

--device=dev01nyc.hukka.com
--device=dev02nyc.hukka.com
Run Code Online (Sandbox Code Playgroud)