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.
Comments
-
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.