2 回答
![?](http://img1.sycdn.imooc.com/54585050000156a302200220-100-100.jpg)
TA贡献1998条经验 获得超6个赞
我会re.sub在这里使用:
message = 'foo 1234567890 bar'
output = re.sub(r'\b([a-z]+) (\d+) ([a-z]+)\b', '[var_a]\\1[var_a] [var_b]\\2[var_b] [var_c]\\3[var_c]', message)
print(output)
这打印:
[var_a]foo[var_a] [var_b]1234567890[var_b] [var_c]bar[var_c]
![?](http://img1.sycdn.imooc.com/533e4c9c0001975102200220-100-100.jpg)
TA贡献1765条经验 获得超5个赞
的解决方案re.sub可能更优雅,但您也可以使用 来groupdict获取span各个组的 ,然后替换它们(相反,因为它会改变索引):
m = r.match(message)
msg = list(message)
for k, v in reversed(list(m.groupdict().items())):
s, e = m.span(k)
msg[s:e] = list(f"[{k}]{v}[{k}]")
print(''.join(msg))
# '[var_a]foo[var_a] [var_b]1234567890[var_b] [var_c]foo[var_c]'
或者,如果这些组始终仅由空格分隔(并且可以在输出中用单个空格替换更多空格),您也可以简单地显示其中的join项目groupdict(顺序应匹配)。
print(" ".join(f"[{k}]{v}[{k}]" for k, v in m.groupdict().items()))
添加回答
举报