我遇到了一个问题,我需要检查模块名称(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的值显然正在被替换,我需要将它们全部保存在数组中。
答案 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]}