如何从字符串中消除子字符串的多个实例

时间:2018-04-05 14:17:09

标签: ruby

我有一个字符串

str = "<strong><strong>HI</strong></strong>".

我想删除<strong></strong>的重复实例以获取<strong>HI</strong>

可能有两个以上的实例。

我尝试使用squeeze('<strong>'),但它似乎无法完成这项工作。

4 个答案:

答案 0 :(得分:1)

你可以这样做:

str = "<strong><strong>HI</strong></strong>"
str.gsub('<strong><strong>', '<strong>').
    gsub('</strong></strong>', '</strong>') # => "<strong>HI</strong>"

答案 1 :(得分:0)

你可以做这样的事情

str = "<strong><strong>HI</strong></strong>"

p str[/<.*?>/]+ str[/>([^<]*)<\//,1]+str[/<\/.*?>/]

答案 2 :(得分:0)

其他选项是使用正则表达式来获得所需的结果。

str.match(/<[a-z]+>[a-zA-Z]+<[\/a-z]+>/)
=> #<MatchData "<strong>HI</strong>">

答案 3 :(得分:0)

这可以通过多种方式完成,其中一种方式是使用gsub,如下所示:

str
  .gsub(/(<strong>)+/, '<strong>')
  .gsub(/(<\/strong>)+/, '</strong>')

第一个gsub用一个<strong>替换<strong>的一个或多个连续实例,第二个gsub替换</strong>的一个或多个连续实例使用一个</strong>(请注意,正则表达式部分中的/需要进行转义。)

值得注意的是,此方法无法确保打开和关闭<strong>代码的匹配数量。