Ruby removes everything but some characters?

How to remove all characters from a string except spaces, numbers, and some others? Something like that:

oneLine.gsub(/[^ULDR0-9\<\>\s]/i,'')

      

I just need to: 0-9 l d u r < > <space>

Also, is there a good document on using regex in Ruby, like a list of special characters with examples?

+3


source to share


3 answers


The regex is already working correctly. However, you need to revert the result to the line you are working on. Otherwise, you are not changing the line ( .gsub()

not changing the line in place).

You can improve the regex a bit by adding the '+' quantum (so that consecutive characters can be replaced in one go). Also, you don't need to hide the angle brackets:



oneLine = oneLine.gsub(/[^ULDR0-9<>\s]+/i, '')

      

A good resource with a special focus on Ruby regular expressions is the Regular Expressions Cookbook by Jan Goywaerts and Stephen Levitan. A good online tutorial by the same author is here .

+7


source


The good old school String#delete

does it without regex. ^

means "NOT".



str = "12eldabc8urp pp"
p str.delete('^0-9ldur<> ') #=> "12ld8ur "

      

+4


source


Just for completeness: you don't need a regex for this particular task, it can be done with simple string manipulation :

irb(main):005:0> "asdasd123".tr('^ULDRuldr0-9<>\t\r\n ', '')
=> "dd123"

      

There is also a method tr!

if you want to replace the old value:

irb(main):009:0> oneLine = 'UasdL asd 123'
irb(main):010:0> oneLine.tr!('^ULDRuldr0-9<>\t\r\n ', '')
irb(main):011:0> oneLine
=> "UdL d 123"

      

It should also be slightly faster (but performance shouldn't be a big issue in Ruby :)

+2


source







All Articles