Ruby除了一些字符外删除所有内容

时间:2012-03-14 20:25:04

标签: ruby regex gsub

如何从字符串中删除除空格,数字和其他字符之外的所有字符? 像这样:

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

我只需:0-9 l d u r < > <space>

另外,有没有关于在Ruby中使用正则表达式的好文档,比如带有示例的特殊字符列表?

3 个答案:

答案 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中的一个大问题:)