将英文字母和数字以外的所有字符替换为下划线

use*_*379 1 ruby regex ascii

我有一个字符串,我想用下划线替换所有特殊字符.

换句话说,我只想要26个英文字母(大写和小写)和0-9和"_"字符.

另请注意,有非英文字符,它们也需要替换为"_".

在Ruby中最优雅的方法是什么?

zx8*_*x81 10

听起来你想要用下划线替换所有非单词字符.因此,

result = subject.gsub(/[^\w]/, '_')
Run Code Online (Sandbox Code Playgroud)

但是你还可以替换换行符和其他空白字符吗?

如果没有,请将其更改为

result = subject.gsub(/[^\w\s]/, '_')
Run Code Online (Sandbox Code Playgroud)

解释正则表达式

[^\w\s]                  # any character except: word characters (a-
                         # z, A-Z, 0-9, _), whitespace (\n, \r, \t,
                         # \f, and " ")
Run Code Online (Sandbox Code Playgroud)

注意

正如@CarySwoveland所提到的,[^\w]也可以用速记书写\W.