假设我们有一个很长的ansible字符串变量mystr
。我们有一个正则表达式模式substr_pattern
,匹配该模式的子字符串将从mystr
另一个变量中过滤掉并分配给另一个变量substr
。尽管使用python本身中的模块执行此操作很简单,但在playbook_filters上的文档中似乎似乎没有明显的方法来执行此操作re
。
Ansible文档中提供了3种方法,它们似乎都无法解决我的问题:
match
:此过滤器取决于整个模式是否匹配整个字符串,但不返回匹配的组/子字符串,则返回true / false。
search
:用于过滤较大字符串中的substr。但是像一样match
,仅返回true / false,而不返回此处所需的匹配的组/子字符串。
regex_replace
:用于将一个字符串中的匹配模式替换为另一个字符串。但是尚不清楚如何将与匹配模式相对应的子字符串/组注册到新变量中。
有什么我想念的吗?还是这是不可缺少的功能?
Ansible版本:2.1
例子:
mystr: "This is the long string. With a url. http://example.org/12345"
pattern: "http:\/\/example.org\/(\d+)"
substr: 12345 # First matched group i.e. \\1
摘要:如何获取与pattern
from匹配的子字符串mystr
并将其注册到ansible变量substr
?
如果可以修改模式,则可以使用regex_replace
过滤器,并只用匹配的数字替换整个字符串。
mystr | regex_replace('^.*http:\/\/example.org\/(\d+).*?$', '\\1')
要将结果分配给新变量,可以使用set_fact
模块。
- set_fact:
substr: "{{ mystr | regex_replace('^.*http:\/\/example.org\/(\d+).*?$', '\\1') }}"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句