从字符串中删除除字符以外的所有内容?

3

我是一名初学 Ruby 的学生,在我的课程作业中需要处理字符串,这引发了一个问题。

假设有一个字符串如下:

I'm the janitor, that's what I am!

任务是从字符串中删除除字符以外的所有内容,以便结果为:
IamthejanitorthatswhatIam

实现这一目标的一种方法是

"I'm the janitor, that's what I am!".gsub(" ", "").gsub(",","").gsub("'","").gsub("!","")

这个方法可以工作,但是看起来有点笨重。处理这个任务的另一种方式可能是使用正则表达式。是否有更符合 Ruby 语言特色的方法来实现这一目标呢?谢谢!

gsub("[^a-zA-Z]", "")应该删除所有非英文字母的内容。 - nhahtdh
我认为你的意思是 /[^a-zA-Z]/ - Adam Eberlin
@AdamEberlin:我不确定关于Ruby语法,因为我不使用它。我只确定正则表达式。 - nhahtdh
2
你认为什么是“字符”?µé算不算字符?呢? - mu is too short
感谢您的建议。在重新检查gsub的文档后,我意识到它可以使用正则表达式,而不仅仅是单个字符。我使用了str.gsub(/[^a-zA-Z]/, "")来处理我的字符串,因为它足以完成我作业所需的任务。 - KernelPanic
1个回答

4

.gsub 中使用正则表达式代替字符串,例如像 /\W/ 这样匹配非单词字符的表达式:

ruby-1.9.3-p194 :001 > x = "I'm the janitor, that's what I am!"
 => "I'm the janitor, that's what I am!" 

ruby-1.9.3-p194 :002 > x.gsub(/\W/, '')
 => "ImthejanitorthatswhatIam" 

正如 @nhahtdh 所指出的,这包括数字和下划线。
一个可以不做此项任务而达到目标的正则表达式是 /[^a-zA-Z]/:
ruby-1.9.3-p194 :001 > x = "I'm the janitor, that's what I am!"
 => "I'm the janitor, that's what I am!" 

ruby-1.9.3-p194 :003 > x.gsub(/[^a-zA-Z]/, "")
 => "ImthejanitorthatswhatIam" 

2
我不知道楼主想要什么,但\W表示除了英文字母的大写和小写、0-9数字和下划线之外的所有字符。 - nhahtdh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接