2012-04-09 62 views
12

试图改变这一点:这个剥离非字母数字字符,但留下空间

"The basketball-player is great! (Kobe Bryant)" 

"the basketball player is great kobe bryant" 

想downcase并删除所有标点符号,而且留有空格...

尝试string.downcase.gsub(/[^a-z ]/, '')但它删除空格

+1

你应该用空格替换连字符吗? – 2012-04-09 12:44:06

回答

30

您可以简单地添加\s(空格)

string.downcase.gsub(/[^a-z0-9\s]/i, '')

+0

你摇滚!优雅和简单。谢谢:) – 2013-06-11 17:44:07

+0

注意:这会去掉数字。 – DrewB 2014-04-07 22:04:15

+1

这使得'篮球运动员'变成'篮球运动员' – 2014-05-11 05:06:21

1

a.downcase.gsub(/[^a-z ]/, "")

注意我一个-Z之后,所添加的空白。 此外,如果你想要替换所有的空格(不仅空间使用\ s由gmalette建议)。

+6

'a.downcase.delete('^ a-z')'是另一种选择。 – steenslag 2012-04-09 14:48:06

+0

感谢Ivaylo和@steenslag,我喜欢这个,它帮助保留空间。 – Joe 2016-08-14 20:07:31

8

一些细微的解决方案,但最简单的往往是最好的:

string.downcase.gsub /\W+/, ' ' 
11

如果你想赶上非拉丁字符,太:

str = "The basketball-player is great! (Kobe Bryant) (ひらがな)" 
str.downcase.gsub(/[^[:word:]\s]/, '') 
#=> "the basketballplayer is great kobe bryant ひらがな" 
4

所有其他答案带出号为好。这适用于给出的例子,但并没有真正回答如何去除非字母数字的问题。

string.downcase.gsub(/[^\w\s\d]/, '')