在Python中扩展regex

2024-09-28 05:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我的程序接受一个正则表达式来描述一组设备。例如

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

应该扩展到dev01纽约hukka.com和dev02纽约hukka.com在

我如何使用Python中的re模块来扩展用户提供的regex以完成可以使用的字符串?我使用的是python2.4。在


Tags: 模块字符串用户dev程序recomdevice
2条回答

如果我们在大括号上re.split,我们得到:

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

列表中的所有其他项目都来自内部大括号,我们接下来需要用逗号分隔:

^{pr2}$

现在我们可以使用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

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

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

返回:

^{pr2}$

相关问题 更多 >

    热门问题