构建自定义配置解析器以读取配置字符串的方法链接样式

时间:2018-07-11 01:29:57

标签: python regex configparser

我正在构建配置解析器,在其中使用正则表达式,我将以

的形式读取字符串配置
  • 方法链接和
  • 方法调用作为另一个方法中的参数。

将读取配置并打印它们的代码:-

r1 = re.findall(r".\b(start|abc|def|mnp|xyz|okm)\((.*?)\)", string_expr)
for pair in r1:
    operator_name = pair[0]
    operator_param = pair[1]
    print(operator_name,'',operator_param)

下面的string_expr对于正则表达式工作正常,所以我得到了所需的输出。

string_expr:-
start().abc().def(1,2).xyz(params)

output:-
abc
def 1,2
xyz params

这里的问题是,只要括号内有任何()数据,那么我就无法获取整个参数。

string_expr:-start().abc().def(1,2).xyz(mnp(okm(params)))

output:-
abc
def 1,2
xyz mnp(okm(params

相反,我想要的是xyz mnp(okm(params))

1 个答案:

答案 0 :(得分:1)

使用负数前瞻表达式来匹配最右边的括号。

import re
r1 = re.findall(r".\b(start|abc|def|mnp|xyz|okm)\((.*?)\)(?![^(]*\))", 'start().abc().def(1,2).xyz(mnp(okm(params)))')
for pair in r1:
    operator_name = pair[0]
    operator_param = pair[1]
    print(operator_name,'',operator_param)

这将输出:

abc  
def  1,2
xyz  mnp(okm(params))