剥离非字母数字字符但在Ruby中留空格

时间:2012-04-09 12:42:02

标签: ruby string

试图改变这个:

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

进入这个:

"the basketball player is great kobe bryant"

想要缩小并删除所有标点符号,但请留空格......

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

6 个答案:

答案 0 :(得分:35)

您只需添加\s(空白)

即可

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

答案 1 :(得分:13)

如果你想要捕捉非拉丁字符:

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

答案 2 :(得分:9)

一些很好的解决方案,但最简单的通常是最好的:

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

答案 3 :(得分:4)

所有其他答案也会删除数字。这适用于给出的示例,但并没有真正回答如何删除非字母数字的问题。

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

答案 4 :(得分:1)

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

请注意我在a-z之后添加的空格。 此外,如果你想要替换所有空格(不仅仅是gmalette建议的空间使用)。

答案 5 :(得分:0)

所有先前的答案都使篮球运动员成为了篮球运动员,或者完全删除了数字,这并非完全必要。

以下代码完全符合您的要求:

text.downcase
    .gsub(/[^[:word:]\s]/, ' ') # Replace sequences of non-alphanumerical chars by a single space

希望这对某人有帮助!