我的程序使用正则表达式来描述一组设备。例如,
--device=dev{01,02}{nyc}.hukka.com
应扩展到dev01nyc.hukka.com和dev02nyc.hukka.com
如何使用Python中的re
模块扩展用户提供的正则表达式以完成我可以使用的字符串?我使用的是Python 2.4。
答案 0 :(得分:6)
如果我们在大括号上re.split,我们会得到:
In [7]: re.split(r'\{(.*?)\}',userstring)
Out[7]: ['--device=dev', '01,02', '', 'nyc', '.hukka.com']
列表中的每个其他项都来自内部大括号,我们接下来需要用逗号分隔:
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']]
现在我们可以使用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))
产量
--device=dev01nyc.hukka.com
--device=dev02nyc.hukka.com
答案 1 :(得分:1)
只需将第一个大括号提取到一个组并迭代该组:
import re
user_arg = "dev{01,02}{nyc}.hukka.com"
regex = re.compile('dev{(?P<dev_id>[^}]*)}{(nyc)}.hukka.com')
result = regex.search(user_arg)
devices = []
for dev_id in result.group(1).split(',') :
devices.append("dev%s%s.hukka.com" % (dev_id, result.group(2)))
print devices
返回:
$ ['dev01nyc.hukka.com', 'dev02nyc.hukka.com']