【问题标题】:Ruby multiple regex gsub in one pass, using different capture groupsRuby 多个正则表达式 gsub 一次通过,使用不同的捕获组
【发布时间】:2022-07-16 22:18:11
【问题描述】:

在 Ruby 中,如何一次性完成以下操作:

text.gsub(/==(.+?)==/){$1.upcase}.gsub(/=(.+?)=/){$1.downcase}

如果text = "==aaa== =BBB=",返回值应该是"AAA bbb"

【问题讨论】:

    标签: regex ruby


    【解决方案1】:

    你可以使用

    text.gsub(/(={1,2})(.*?)\1/) { $1.length == 1 ? $2.downcase : $2.upcase}
    

    请参阅Ruby demoregex demo

    详情

    • (={1,2}) - 一个或两个 = 字符被捕获到第 1 组
    • (.*?) - 第 2 组:除换行符之外的任何零个或多个字符尽可能少
    • \1 - 与第 1 组中捕获的文本相同。

    如果 Group 1 包含 = 值,则替换为小写的 Group 2 值,否则为大写的 Group 2 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      相关资源
      最近更新 更多