我正在尝试使用 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):除 _- 之外的一个或多个字符 .* - 字符串的其余部分。 (?&lt;=_)[^_-]+: (?&lt;=_) - 字符串中紧接在_ 前面的位置 [^_-]+ - 除了_- 之外的一个或多个字符。

【讨论】:

以上是关于我正在尝试使用 regex_replace 命令提取子字符串。我想在这里提取“SWIFTInward”的主要内容,如果未能解决你的问题,请参考以下文章

Hive Regex_replace 给出了无法编译正则表达式模式:错误

Postgres Regex_Replace:在替换字符串中使用模式

如何在 regex_replace() 中使用 db 列名 - presto

我只想将 regex_replace 用于第一个字符(电话号码)

解码为希伯来语时不正确的 regex_replace

Oracle:是不是有支持内联代码的 REGEX_REPLACE 变体?