首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby是否删除除某些字符以外的所有内容?

Ruby是否删除除某些字符以外的所有内容?
EN

Stack Overflow用户
提问于 2012-03-15 04:25:04
回答 3查看 4.4K关注 0票数 4

如何从字符串中删除除空格、数字和其他字符以外的所有字符?如下所示:

代码语言:javascript
复制
oneLine.gsub(/[^ULDR0-9\<\>\s]/i,'')

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-15 04:28:10

您拥有的正则表达式已经正常工作。但是,您确实需要将结果赋值回您正在操作的字符串。否则,您不会更改字符串(.gsub()不会就地修改字符串)。

您可以通过添加一个'+‘量词来改进正则表达式(这样就可以一次性替换连续的字符)。此外,您不需要转义尖括号:

代码语言:javascript
复制
oneLine = oneLine.gsub(/[^ULDR0-9<>\s]+/i, '')

Jan Goyvaerts和Steven Levithan的Regular Expressions Cookbook是一个很好的资源,它特别考虑了Ruby正则表达式。同一作者的一个很好的在线教程是here

票数 8
EN

Stack Overflow用户

发布于 2012-03-15 05:30:18

很好的老String#delete不用正则表达式就可以做到这一点。^的意思是“不”。

代码语言:javascript
复制
str = "12eldabc8urp pp"
p str.delete('^0-9ldur<> ') #=> "12ld8ur "
票数 5
EN

Stack Overflow用户

发布于 2012-03-15 04:37:11

为了完整起见:对于这个特定的任务,您不需要正则表达式,这可以使用simple string manipulation来完成

代码语言:javascript
复制
irb(main):005:0> "asdasd123".tr('^ULDRuldr0-9<>\t\r\n ', '')
=> "dd123"

如果您想要替换旧值,还有tr!方法:

代码语言:javascript
复制
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中性能不应该是一个大问题:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9709718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档