如何从字符串中删除除空格,数字和其他字符之外的所有字符? 像这样:
oneLine.gsub(/[^ULDR0-9\<\>\s]/i,'')
我只需:0-9 l d u r < > <space>
另外,有没有关于在Ruby中使用正则表达式的好文档,比如带有示例的特殊字符列表?
答案 0 :(得分:8)
你的正则表达式已经正常工作了。但是,您需要将结果分配回您正在操作的字符串。否则,您不会更改字符串(.gsub()
不会就地修改字符串。)
您可以通过添加“+”量词来改善正则表达式(因此可以一次性替换连续的字符)。此外,您不需要转义尖括号:
oneLine = oneLine.gsub(/[^ULDR0-9<>\s]+/i, '')
一个特殊考虑Ruby正则表达式的好资源是Jan Goyvaerts和Steven Levithan的Regular Expressions Cookbook。同一作者的良好在线教程是here。
答案 1 :(得分:5)
好的旧String#delete
没有正则表达式。 ^
表示“不”。
str = "12eldabc8urp pp"
p str.delete('^0-9ldur<> ') #=> "12ld8ur "
答案 2 :(得分:3)
为了完整起见:您不需要这个特定任务的正则表达式,这可以使用simple string manipulation来完成:
irb(main):005:0> "asdasd123".tr('^ULDRuldr0-9<>\t\r\n ', '')
=> "dd123"
如果要替换旧值,还有tr!
方法:
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"
这也应该快一点(但性能不应该是Ruby中的一个大问题:)