21

试图改变这一点:

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

进入这个:

"the basketball player is great kobe bryant"

想要小写并删除所有标点符号但留下空格......

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

4

6 回答 6

39

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

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

于 2012-04-09T12:46:34.270 回答
16

如果您也想捕捉非拉丁字符:

str = "The basketball-player is great! (Kobe Bryant) (ひらがな)"
str.downcase.gsub(/[^[:word:]\s]/, '')
#=> "the basketballplayer is great kobe bryant ひらがな"
于 2012-04-09T13:55:54.223 回答
12

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

string.downcase.gsub /\W+/, ' '
于 2012-04-09T13:18:49.527 回答
6

所有其他答案也去掉了数字。这适用于给出的示例,但并不能真正回答如何去除non-alphanumeric的问题。

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

请注意,这不会删除下划线。如果你需要,那么:

string.downcase.gsub(/[^a-zA-Z\s\d]/, '')
于 2014-04-07T22:03:27.200 回答
1

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

请注意我在 az 之后添加的空格。此外,如果您想替换所有空格(不仅使用 gmalette 建议的空间使用 \s)。

于 2012-04-09T12:47:18.153 回答
1

之前的所有答案都使篮球运动员成为篮球运动员或完全删除数字,这并不是所需要的。

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

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

希望这对某人有帮助!

于 2018-09-16T11:09:02.993 回答