构建自定义配置解析器以读取配置字符串的方法链接样式
Building custom configuration parser to read method chaining style of configuration string
我正在构建一个配置解析器,我将使用正则表达式读取
形式的字符串配置
- 方法链接和
- 方法在另一个方法中作为参数调用。
读取配置并打印它们的代码:-
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))
使用否定先行表达式来匹配最外层的右括号。
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))
我正在构建一个配置解析器,我将使用正则表达式读取
形式的字符串配置- 方法链接和
- 方法在另一个方法中作为参数调用。
读取配置并打印它们的代码:-
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))
使用否定先行表达式来匹配最外层的右括号。
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))