Ruby 2.3.4——如何删除字符串的子字符串?

Ruby 2.3.4——如何删除字符串的子字符串?,ruby,range,substring,Ruby,Range,Substring,例如:有一个字符串: 'Trump is great#Trump is great#' 如果我这样做: 'Trump is great#Trump is great#'.delete! 'Trump is great#' 我会得到: '' 但我想得到: 'Trump is great#' 所以我想要一个“特朗普很棒”的范围,并按这个范围删除这个子串 怎么做 或者用其他方法删除子字符串?我想你要找的是sub!。 不像gsub!或删除!,它只替换第一个匹配项 'Trump is great#

例如:有一个字符串:

'Trump is great#Trump is great#'
如果我这样做:

'Trump is great#Trump is great#'.delete! 'Trump is great#'
我会得到:

''
但我想得到:

'Trump is great#'
所以我想要一个“特朗普很棒”的范围,并按这个范围删除这个子串

怎么做


或者用其他方法删除子字符串?

我想你要找的是sub!。 不像gsub!或删除!,它只替换第一个匹配项

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

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

我发现我可以做到这一点!:

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

如果字符串的模式相似,可以执行以下操作:

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#"

如果您的字符串总是加倍的话,您可以删除英镑以摆脱+

str.gsub!(/^(.*)(?=\1$)/, '')
特朗普伟大只是一个例子吗?您要清理的模式是否总是相同的-带有a的sting,前缀和后缀是相同的字符串texttext?