在数组中保存匹配项

2024-04-19 13:07:19 发布

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

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

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

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

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

使用时匹配.组():

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

运行此示例时:

module hi(a, b, c)

但问题是,模块参数的值显然被替换了,我需要将它们全部保存在一个数组中。你知道吗


Tags: 模块方法name示例参数param表达式数组
1条回答
网友
1楼 · 发布于 2024-04-19 13:07:19

如果要使用regex,请尝试以下操作:

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]}

相关问题 更多 >