Python 如果正则表达式匹配,则替换字符串,并替换为它匹配的其他正则表达式
我试图在满足某些条件后创建dict。以下是代码片段:Python 如果正则表达式匹配,则替换字符串,并替换为它匹配的其他正则表达式,python,regex,Python,Regex,我试图在满足某些条件后创建dict。以下是代码片段: def dic_gen(exc): param_errors = {re.sub(r"sss_", r"aaa_",err.name): err.address for err in exc.errors } param_errors["status"] = "ERROR" return param_errors 上面的代码所做的是检查err.name是否有sss,然后将其删除并创建一个dict。现在我还想添加另一个
def dic_gen(exc):
param_errors = {re.sub(r"sss_", r"aaa_",err.name): err.address for err in exc.errors }
param_errors["status"] = "ERROR"
return param_errors
上面的代码所做的是检查err.name是否有sss,然后将其删除并创建一个dict。现在我还想添加另一个条件,即如果它有“ttt”,则将其替换为“bbb”,是否可以使用re.sub?或者最有效的方法是什么
谢谢,我不知道您打算如何使用re,但我会使用:
abc = "Something_sss whatever"
result = abc.replace("_sss","_ttt")
print result
结果:
"Something_ttt whatever"
通过传递re.sub()
一个函数而不是替换字符串,您可以这样做:
def func(matchobj):
return 'aaa_' if matchobj.group(0) == 'sss_' else 'bbb_'
def dic_gen(exc):
param_errors = {re.sub(r'(sss_)|(ttt_)', func, err.name):
err.address for err in exc.errors}
param_errors["status"] = "ERROR"
return param_errors
由于函数只是一个表达式,因此可以使用它生成一个lambda
,并避免外部函数定义(尽管它会降低代码的可读性):
我想做的是,如果err.name中有sss_uuu,那么用aaa_u替换它,如果它的ttt_uuu,那么用bbb_u替换它。因为我在循环exc值,我想也许有一些内置的方法可以更有效地执行。
def dic_gen(exc):
param_errors = {re.sub(r'(sss_)|(ttt_)',
lambda mo: 'aaa_' if mo.group(0) == 'sss_' else 'bbb_', err.name):
err.address for err in exc.errors}
param_errors["status"] = "ERROR"
return param_errors