Shorter way to remove non-characters than gsub(/\d|\W/, "")

11,641

Solution 1

my_string = "Here's the #: 49848! - but will dashes, commas & stars (*) show?"
p my_string.delete('^a-zA-Z')
#=>"Heresthebutwilldashescommasstarsshow"

Solution 2

I have this one

src.gsub(/[^a-z]/i, "")

also not shorter, but better to read in my opinion.

The i modifier makes the regex case independent, so that a-z matches also A-Z. A small difference is that this regex will also replace _ which is not replaced by yours.

Solution 3

If you want to keep also unicode letters, use this one:

/\PL/

This matches all non letter character.

Share:
11,641
Michael Durrant
Author by

Michael Durrant

rails ruby rspec rock

Updated on June 24, 2022

Comments

  • Michael Durrant
    Michael Durrant almost 2 years
    my_string = 'Here's the #: 49848! - but will dashes, commas & stars (*) show?'
    
    puts src.gsub(/\d|\W/, "")
    

    i.e. can I remove the or ("|").

    Here's how I got here, can I get shorter?

    src =  "Here's the #: 49848! - but will dashes, commas & stars (*) show?"
    puts "A) - " + src
    puts "B) - " + src.gsub(/\d\s?/, "")
    puts "C) - " + src.gsub(/\W\s?/, "")
    puts "D) - " + src.gsub(/\d|\W\s?/, "")
    puts "E) - " + src.gsub(/\d|\W/, "")
    puts "F) - " + src
    
    A) - Here's the #: 49848! - but will dashes, commas & stars (*) show?
    B) - Here's the #: ! - but will dashes, commas & stars (*) show?
    C) - Heresthe49848butwilldashescommasstarsshow
    D) - Heresthebutwilldashescommasstarsshow
    E) - Heresthebutwilldashescommasstarsshow
    F) - Here's the #: 49848! - but will dashes, commas & stars (*) show?
    

    n.d. D) and E) are what I want for output. Just characters.