【发布时间】:2020-10-12 09:25:54
【问题描述】:
对于以下三个输出需要一个单一的正则表达式:
输入1:aa::bb::cc
输出1:aa::cc
输入2:bb::aa::cc
输出2:aa::cc
输入3:aa::cc::bb
输出3:aa::cc
我已经写了下面的正则表达式。但是多余的双冒号还在。
示例:
{{ aa::bb::cc | regexx_replace('bb') }} --> 输出为:aa::::cc
【问题讨论】:
-
为什么你绝对需要用正则表达式来做这个?这将很难编写,可能难以阅读,并且当您在几周/月内遇到它进行维护时,您将需要相当多的时间来了解您所做的事情。 IMO 有一个更简单的解决方案。尝试使用这一衬里,例如:
ansible localhost -m debug -a msg="{{ 'aa::bb::cc'.split('::') | difference(['bb']) | join('::') }}"。另请注意,这可以与要删除的任意数量的元素一起使用。 -
你的例子不起作用。 a)您不能将字符串推送到这样的过滤器中,因为它会尝试将
aa::bb::cc解析为变量。 b)它是regex_replace(你有regexx_replace)。