前言
我之前做过一个perl脚本,是根据输入的正则配置,把要处理的字符进行正则转换,根据我现在的需求呢,我需要用python再做一个这样的函数,以备后用;
示例
配置好的正则匹配模板(来自配置文件),对于符合以下规则的字符串:
org = "(pre|post)_a_b_if(.*)"
转换为以下的形式:
to = "mod1_mod2_if#2#_#1#"
举个例子:
"post_a_b_ifsize" -> "mod1_mod2_ifsize_post"
用#1#?.. #i#这类形式来记录通过正则模板被匹配到的字符串,后面可以按需求摆放在任何位置;
代码实现
def match_rep(org, to, inst):
ret = inst
def rep_m(match):
i = 1
rep = to
for key in match.groups():
rep = re.sub(r"#" + str(i) + "#", key, rep)
rep = re.sub(r"#" + str(i), key, rep)
i += 1
return rep
if re.search(r"%s" % org, inst):
ret = re.sub(r"%s" % org, rep_m, inst)
return ret
效果测试
org = "(pre|post)_a_b_if(.*)"
to = "mod1_mod2_if#2#_#1#"
print(match_rep(org, to, "post_a_b_ifsize"))
print(match_rep(org, to, "pre_a_b_iflen"))
print(match_rep(org, to, "pre_b_a_iflen"))
print(match_rep(org, to, "a_b_iflen"))
|