gpt4 book ai didi

Ansible:正则表达式搜索列表中的特定字符串

转载 作者:行者123 更新时间:2023-12-04 08:32:09 26 4
gpt4 key购买 nike

我有一个名为 somelist 的字符串列表,如下所示。如何指定正则表达式来搜索字符串 姓名:鲍勃 - 请注意,这不应与名称匹配:bobby。我试过使用 ^ 和 $ 来表示字符串的开始,字符串的结束,但它不起作用。此外,冒号导致以下错误:语法错误 - 在此上下文中不允许映射值。我不知道如何摆脱冒号。谢谢!

---
- hosts: localhost

vars:
somelist:
- "name: greg"
- "name: bobby"
- "name: joe"

tasks:
- debug: msg='{{ somelist is search("^name: bob$") }}' # <--- this should equate to false

- debug: msg='{{ somelist is search("^name: bobby$") }}' # <--- this should equate to true

最佳答案

使用 select并测试长度。例如

    - debug:
msg: "{{ somelist|
select('search', '^name: bob$')|
list|length > 0 }}" # <--- this should equate to false

- debug:
msg: "{{ somelist|
select('search', '^name: bobby$')|
list|length > 0 }}" # <--- this should equate to true
给(略)
  msg: false

msg: true
科伦“:”不是 Python regex特殊字符。没有必要逃避它。将正则表达式放入变量可以简化条件。例如下面的任务
    - debug:
msg: bob is in the list
when: somelist|select('search', regex)|list|length > 0
vars:
regex: '^name: bob$'
- debug:
msg: bobby is in the list
when: somelist|select('search', regex)|list|length > 0
vars:
regex: '^name: bobby$'
给(略)
skipping: [localhost]

ok: [localhost] =>
msg: bobby is in the list

可以避免使用正则表达式。例如,映射 from_yaml,创建字典列表,然后选择属性。下面的任务给出相同的结果
    - debug:
msg: "{{ somelist|
map('from_yaml')|
selectattr('name', 'eq', 'bob')|
list|length > 0 }}"

- debug:
msg: "{{ somelist|
map('from_yaml')|
selectattr('name', 'eq', 'bobby')|
list|length > 0 }}"

关于Ansible:正则表达式搜索列表中的特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64966513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com