在阵列上保存匹配

时间:2014-07-14 22:39:07

标签: python regex

我遇到了一个问题,我需要检查模块名称(a,b,c,d)之类的表达式,并将这些变量保存到数组中。这是我到目前为止的地方:

/^module\s(?P<module_name>\w+)(\s?)\(((\s?)((?P<module_params>\w+)\,)?)+(? P<module_last_param>\w+)\)$/

使用方法match.groupdict()的输出是:

{'module_params': 'b', 'module_name': 'hi', 'module_last_param': 'c'}

使用match.groups():

('hi', '', '', '', 'b,', 'b', 'c')

运行此示例时:

module hi(a, b, c)

但问题是,module_params的值显然正在被替换,我需要将它们全部保存在数组中。

1 个答案:

答案 0 :(得分:0)

如果您想使用正则表达式,请尝试以下方法:

s = 'module hi(a, b, c)'
regex = re.compile(r'\s(\w+)\(([^\)]+)\)')
try:
    module_name, parameters = regex.search(s).groups()
except AttributeError as e:
    print 'No match for: {}'.format(s)
    raise
parameters = parameters.split(',')
print module_name, parameters
d = {'module_name':module_name,
     'module_params':parameters[:-1],
     'module_last_param':parameters[-1]}
print d
# {'module_last_param': ' c', 'module_name': 'hi', 'module_params': ['a', ' b']}

如果您确信所有数据都符合该模式,您也可以在没有正则表达式的情况下执行此操作:

name, params = s.split('(')
name = name.split()[1]
params = params[:-1].split(',')
d = {'module_name':name,
     'module_params':params[:-1],
     'module_last_param':params[-1]}