You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python及Ansible的regex_replace过滤器实现字符串转换?

解决方法

你之前用的正则表达式完全匹配不到目标内容,^(?P<name>)$是匹配空行的规则,自然不会产生任何替换效果。下面提供几种可行的处理方案:

方案一:Jinja2模板内处理

如果是在Jinja2环境中操作,先把字符串按换行分割,再遍历每行做针对性拼接:

{% set input_str = '@cat\n@chicken\napple\nfruit\njuice' %}
{% set lines = input_str.split('\n') %}
{% for line in lines %}
    {% if loop.last %}
{{ line }} : all
    {% else %}
+ : {{ line }} : all
    {% endif %}
{% endfor %}

执行后会生成你需要的结果:前四行带+ : 前缀,最后一行直接输出juice : all。如果所有行都需要统一加+ : ,去掉if loop.last的判断即可。

方案二:Python原生代码处理

如果直接用Python脚本实现,代码逻辑更直观:

input_str = '@cat\n@chicken\napple\nfruit\njuice'
lines = input_str.split('\n')
result = []
for idx, line in enumerate(lines):
    if idx == len(lines) - 1:
        result.append(f"{line} : all")
    else:
        result.append(f"+ : {line} : all")
final_output = '\n'.join(result)
print(final_output)

运行后输出:

+ : @cat : all
+ : @chicken : all
+ : apple : all
+ : fruit : all
juice : all

正则修正方案(仅作参考)

如果一定要用正则替换,需要匹配每行的实际内容而非空行,Jinja2中可这样写:

{{ '@cat\n@chicken\napple\nfruit\njuice'| regex_replace('^(.*)$', '+ : \\1 : all', multiline=True) }}

但这种方式会给所有行加上+ : 前缀,若要单独处理最后一行,正则逻辑会变得复杂,不如遍历方式简洁。

内容的提问来源于stack exchange,提问作者medisamm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:03:19