问题描述
我在Ansible中尝试了以下代码
---
- hosts: windows
strategy: linear
vars:
war_file_path: F:\\Install\\IIBProjects\\DE\\WAR\\DE_SWIFTInward-202010.0.0.war
tasks:
- name: Get properties folder path for windows
set_fact:
endpointDetails: "{{ item | win_basename | regex_replace('\\\\(?:(?!\\\\).)*$','') }}"
with_items:
- "{{ war_file_path }}"
register: war_file_name
when: ansible_os_family == "Windows"
期望输出:SWIFTInward
我得到的错误输出:DE_SWIFTInward-202010.0.0.war
解决方法
win_basename
返回不带目录详细信息的文件名。因此,您的正则表达式与之不匹配,因为它在开始时需要\
。
您需要
endpointDetails: "{{ item | win_basename | regex_replace('^[^_]*_([^_-]+).*','\\1') }}"
请参见regex demo
或者,将regex_search
与简单的_([^_-]+)-
regex结合使用:
endpointDetails: "{{ item | win_basename | regex_search('(?<=_)[^_-]+') }}"
详细信息
-
^[^_]*_([^_-]+).*
:-
^
-字符串的开头 -
[^_]*
-除_
以外的零个或多个字符 -
_
-一个_
字符 -
([^_-]+)
-第1组(\1
):除_
和-
以外的一个或多个字符 -
.*
-字符串的其余部分。
-
-
(?<=_)[^_-]+
:-
(?<=_)
-字符串中紧邻_
的位置
-
[^_-]+
-除_
和-
以外的一个或多个字符。
-