【发布时间】:2022-07-16 22:18:11
【问题描述】:
在 Ruby 中,如何一次性完成以下操作:
text.gsub(/==(.+?)==/){$1.upcase}.gsub(/=(.+?)=/){$1.downcase}
如果text = "==aaa== =BBB=",返回值应该是"AAA bbb"
【问题讨论】:
在 Ruby 中,如何一次性完成以下操作:
text.gsub(/==(.+?)==/){$1.upcase}.gsub(/=(.+?)=/){$1.downcase}
如果text = "==aaa== =BBB=",返回值应该是"AAA bbb"
【问题讨论】:
你可以使用
text.gsub(/(={1,2})(.*?)\1/) { $1.length == 1 ? $2.downcase : $2.upcase}
请参阅Ruby demo 和regex demo。
详情:
(={1,2}) - 一个或两个 = 字符被捕获到第 1 组(.*?) - 第 2 组:除换行符之外的任何零个或多个字符尽可能少\1 - 与第 1 组中捕获的文本相同。如果 Group 1 包含 = 值,则替换为小写的 Group 2 值,否则为大写的 Group 2 值。
【讨论】: