【问题标题】:Regex: select each occurrence of a character up until another character正则表达式:选择每个出现的字符直到另一个字符
【发布时间】:2021-11-15 17:19:13
【问题描述】:

我的文档中有几行看起来像这样:

foo-bar-foo[Foo - Bar]

我想选择每个 - 字符,直到每行的第一个 [ 括号。因此不应选择方括号中的-

我怎样才能用正则表达式实现这一点?

我已经有了这个正则表达式/.+?(?=\[)/g,它会选择每个字符直到第一个[,但我只想要-

编辑:我想用sed 命令(GNU)替换这些选定的字符。

【问题讨论】:

    标签: regex sed


    【解决方案1】:

    你可以使用

    sed -E ':a; s/^([^[-]+)-/\1/; ta'
    

    查看online demo

    #!/bin/bash
    s='foo-bar-foo[Foo - Bar]'
    sed -E ':a; s/^([^[-]+)-/\1/; ta' <<< "$s"
    # => foobarfoo[Foo - Bar]
    

    详情

    • -E - 启用 POSIX ERE 语法(这样就无需转义捕获括号和 + 量词)
    • :a - a 标签
    • s/^([^[-]+)-/\1/ - 从将这个子字符串捕获到第 1 组 (\1) 的字符串开头找到除 [- 之外的一个或多个字符,然后匹配 - 字符
    • ta - 成功替换后跳转到 a 标签

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      相关资源
      最近更新 更多