【发布时间】:2014-01-14 19:39:08
【问题描述】:
我有一些动态字符串,其中有一个X 字符。 X 可以连续出现,也可以分散在字符串中。我想用#替换那些X。
例如,abXXcX12XX。我想要ab#c#12#。这意味着多个连续的X 必须只替换为一个#,如果只有一个X,那么也可以替换为一个#。
我试过了:
s = "aXX123Xc56XXX"
s.squeeze('X').gsub('X','#') # => "a#123#c56#"
任何优雅的方式或直接的方法来做同样的操作?
【问题讨论】:
-
这不是关于优雅的问题,实际上是关于正确性的问题。使用
squeeze的问题在于它会挤压任何类型的字符,而不仅仅是X。 -
@DavidGrayson 那是我的错字……我修好了……
-
因为您没有使用带有
gsub的正则表达式,所以您将失去gsub所需的特征,它可以让您完全删除squeeze。正如几个答案所示,使用/X+/将吞噬连续的'X'字符,用单个'#'替换它们。