在Python中扩展正则表达式

在Python中扩展正则表达式,python,regex,Python,Regex,我的程序采用正则表达式来描述一组设备。比如说, --device=dev{01,02}{nyc}.hukka.com 应扩展到dev01nyc.hukka.com和dev02nyc.hukka.com 如何使用Python中的re模块来扩展用户提供的正则表达式以完成我可以使用的字符串?我使用的是Python 2.4。如果使用大括号,我们会得到: In [7]: re.split(r'\{(.*?)\}',userstring) Out[7]: ['--device=dev', '01,02'

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

--device=dev{01,02}{nyc}.hukka.com 
应扩展到dev01nyc.hukka.com和dev02nyc.hukka.com

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

如果使用大括号,我们会得到:

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']]
现在,我们可以使用来列举各种可能性:

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

只需将第一个大括号提取到一个组并在该组上迭代:

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

这可能是不可能的。一般来说,正则表达式可以接受具有无限数量单词的语言,因此RE库通常不支持尝试枚举它们。您发布的不是正则表达式。您实际上是在创建一种新的模板语言。确保你真的想要那样。联合国大学确实有适当的办法。
$ ['dev01nyc.hukka.com', 'dev02nyc.hukka.com']