Skip to content
instance method

String#delete

(::String::selector selector_0, *::String::selector more_selectors) -> ::String
delete(*selectors) → new_string

Returns a new string that is a copy of self with certain characters removed; the removed characters are all instances of those specified by the given string selectors.

For one 1-character selector, removes all instances of that character:

Example
s = 'abracadabra'
s.delete('a') # => "brcdbr"
s.delete('b') # => "aracadara"
s.delete('x') # => "abracadabra"
s.delete('')  # => "abracadabra"

s = 'тест'
s.delete('т') # => "ес"
s.delete('е') # => "тст"

s = 'よろしくお願いします'
s.delete('よ') # => "ろしくお願いします"
s.delete('し') # => "よろくお願います"

For one multi-character selector, removes all instances of the specified characters:

Example
s = 'abracadabra'
s.delete('ab')     # => "rcdr"
s.delete('abc')    # => "rdr"
s.delete('abcd')   # => "rr"
s.delete('abcdr')  # => ""
s.delete('abcdrx') # => ""

Order and repetition do not matter:

Example
s.delete('ba')   == s.delete('ab') # => true
s.delete('baab') == s.delete('ab') # => true

For multiple selectors, forms a single selector that is the intersection of characters in all selectors and removes all instances of characters specified by that selector:

Example
s = 'abcdefg'
s.delete('abcde', 'dcbfg') == s.delete('bcd') # => true
s.delete('abc', 'def')     == s.delete('')    # => true

In a character selector, three characters get special treatment:

  • A caret ('^') functions as a negation operator for the immediately following characters:

    Example
    s = 'abracadabra'
    s.delete('^bc') # => "bcb"  # Deletes all except 'b' and 'c'.
    
  • A hyphen ('-') between two other characters defines a range of characters:

    Example
    s = 'abracadabra'
    s.delete('a-c') # => "rdr"  # Deletes all 'a', 'b', and 'c'.
    
  • A backslash ('\') acts as an escape for a caret, a hyphen, or another backslash:

    Example
    s = 'abracadabra'
    s.delete('\^bc')           # => "araadara"   # Deletes all '^', 'b', and 'c'.
    s.delete('a\-c')           # => "brdbr"      # Deletes all 'a', '-', and 'c'.
    'foo\bar\baz'.delete('\\') # => "foobarbaz"  # Deletes all '\'.
    

These usages may be mixed:

Example
s = 'abracadabra'
s.delete('a-cq-t') # => "d"         # Multiple ranges.
s.delete('ac-d')   # => "brbr"      # Range mixed with plain characters.
s.delete('^a-c')   # => "abacaaba"  # Range mixed with negation.

For multiple selectors, all forms may be used, including negations, ranges, and escapes.

Example
s = 'abracadabra'
s.delete('^abc', '^def') == s.delete('^abcdef') # => true
s.delete('a-e', 'c-g')   == s.delete('cde')     # => true
s.delete('^abc', 'c-g')  == s.delete('defg')    # => true

Related: see Converting to New String.

Ruby version changes

  1. 3.0
See also #delete! #dedup #crypt #delete_prefix also in 4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0