【问题标题】:Match the first string that starts with // up to the first space with regex用正则表达式匹配第一个以 // 开头的字符串,直到第一个空格
【发布时间】:2022-10-01 08:42:46
【问题描述】:

我试图提取以 // 开头的第一个字符串到第一个空格。 到目前为止,我有 ^(\\A\\w+) 但它只给了我第一个词,我不知道如何告诉它也匹配以 //

例如:

#Sample text
//AnyNumberORLetter notthis <-- only want to match //AnyNumberORLetter  
//HELLO WORLD

编辑错字

编辑 2:对不起,我正在使用 Ansible 和正则表达式

    - name: \"replace job name\"
      ansible.builtin.lineinfile:
        path: \"{{jcl_path}}\"
        regexp: \'^(\\A\\w+)\'
        line: \'{{job_name}}\'
        group: dart
        mode: g+rw
      delegate_to: localhost

    标签: regex ansible


    【解决方案1】:

    要也以 // 开头,您可以将 // 设为可选:

    ^(?://)?\w+
    

    Regex demo

    仅以// 开头

    ^//\w+
    

    Regex demo

    【讨论】:

    • 我如何告诉它只匹配第一个找到的?
    • @Mr.White 如果要匹配字符串开头的第一个匹配项,则 \A(?://)?\w+
    • 你的表达有效!结合波西米亚建议切换到替换。
    【解决方案2】:

    这会将您的目标捕获为第 1 组:

    (//\S+)([\s\S]*)
    

    并删除 line: 并添加 replace: '\1 {{job_name}}'\2

    live demo

    正则表达式分解:

    • ^ 表示开始
    • \S 表示非空白字符
    • + 表示前面的一个或多个表达式
    • [\s\S]* 表示输入的其余部分(适用于任何形式的正则表达式)

    【讨论】:

    • 这也匹配另一行我只需要它来匹配找到的第一个匹配项
    • @Mr.White 查看编辑后的答案
    • 您可能需要删除 line: 并添加 replace: '\1 {{job_name}}'
    • 我切换到替换和你的表情。它替换了整个文件...
    • 谢谢你!这也有很大帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多