我正在尝试使用 regex_replace 命令提取子字符串。我想在这里提取“SWIFTInward”
Posted
技术标签:
【中文标题】我正在尝试使用 regex_replace 命令提取子字符串。我想在这里提取“SWIFTInward”【英文标题】:I am trying to extract a substring using regex_replace command . I want to extract “SWIFTInward” here 【发布时间】:2021-02-10 11:48:04 【问题描述】:我在 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
【问题讨论】:
请在字符串末尾提供您需要排除的详细信息:-202010.0.0.war
的预期模式是什么?
【参考方案1】:
win_basename
返回不带目录详细信息的文件名。因此,您的正则表达式与它不匹配,因为它需要 \
开头。
你需要
endpointDetails: " item | win_basename | regex_replace('^[^_]*_([^_-]+).*', '\\1') "
见regex demo
或者,使用regex_search
和一个简单的_([^_-]+)-
regex:
endpointDetails: " item | win_basename | regex_search('(?<=_)[^_-]+') "
详情
^[^_]*_([^_-]+).*
:
^
- 字符串的开头
[^_]*
- 除_
之外的零个或多个字符
_
- 一个 _
字符
([^_-]+)
- 第 1 组 (\1
):除 _
和 -
之外的一个或多个字符
.*
- 字符串的其余部分。
(?<=_)[^_-]+
:
(?<=_)
- 字符串中紧接在_
前面的位置
[^_-]+
- 除了_
和-
之外的一个或多个字符。
【讨论】:
以上是关于我正在尝试使用 regex_replace 命令提取子字符串。我想在这里提取“SWIFTInward”的主要内容,如果未能解决你的问题,请参考以下文章
Hive Regex_replace 给出了无法编译正则表达式模式:错误
Postgres Regex_Replace:在替换字符串中使用模式
如何在 regex_replace() 中使用 db 列名 - presto