【问题标题】:Ruby 2.3.4 -- How to delete a substring of a string?Ruby 2.3.4 -- 如何删除字符串的子字符串?
【发布时间】:2018-07-05 03:18:27
【问题描述】:

例如:有一个字符串:

'Trump is great#Trump is great#'

如果我这样做:

'Trump is great#Trump is great#'.delete! 'Trump is great#'

我会得到:

''

但我想得到:

'Trump is great#'

所以我想要一个'Trump is great#' 的范围,并通过这个范围删除这个子字符串。

如何做到这一点?

或者其他方式删除子串?

【问题讨论】:

  • 特朗普很棒只是一个例子吗?您要清理的模式是否始终相同 - 带有 # 的刺痛,并且前缀和后缀是相同的字符串 (text#text)?

标签: ruby range substring


【解决方案1】:

我认为您正在寻找的是sub!。 与gsub!delete! 不同,它只替换第一个匹配项。

'Trump is great#Trump is great#'.sub!('Trump is great#', '')
=> 'Trump is great#'

由于它接受正则表达式,您可以使用gsub 来定义您希望它匹配多少次。

【讨论】:

    【解决方案2】:

    如果你的字符串总是加倍...

    str.gsub!(/^(.*)(?=\1$)/, '')
    

    【讨论】:

      【解决方案3】:

      我发现我可以做到! :

      'Trump is great#Trump is great#'.slice! 'Trump is great#'
      

      【讨论】:

        【解决方案4】:

        如果你的字符串模式相似,你可以这样做:

        string.split('#').first + '#'
        

        你也可以在字符串类中添加自定义方法:

        class String
          def cut_pound
            split('#').first + '#'
          end
        end
        

        所以,如果你有相同模式的字符串:

        string1 = 'Wimbledon Open#Wimbledon Open#'
        string2 = 'FIFA world cup#FIFA world cup#'
        

        是否可以调用:

        string1.cut_pound # => "Wimbledon Open#"
        string2.cut_pound # => "FIFA world cup#"
        

        你可以删除英镑摆脱+ '#'

        【讨论】:

          猜你喜欢
          • 2011-05-28
          • 2011-05-10
          • 2015-11-20
          • 1970-01-01
          • 1970-01-01
          • 2011-10-15
          • 2010-11-05
          相关资源
          最近更新 更多