如何为gsub编写正则表达式,保留空格,字母和数字但删除标点符号?

时间:2013-11-07 18:49:43

标签: ruby regex

我正在尝试编写一个实现以下目标的正则表达式:

General Motors --> General Motors (stays the same!)
Yahoo!         --> Yahoo (remove exclamation point)
Le7el          --> Le7el
Mat. Science   --> Mat Science

我尝试了一个简单的“/ \ W + $ /”,但不幸的是,它只在行尾抓到了标点符号。

3 个答案:

答案 0 :(得分:1)

尝试s/[^\w\s]//g,它应该用空字符串替换所有非单词和非空格字符。

如果需要,请准确指定您认为有效字符的内容,例如s/[^A-Za-z0-9 ]//g


好的,这就是Perl,但这是 think 正则表达式。

答案 1 :(得分:1)

如果您需要支持Unicode,请使用“Punct”属性:

s.gsub(/\p{Punct}/, '')

这对于简单的ASCII标点符号也同样有用。

答案 2 :(得分:0)

['General Motors','Yahoo!','Le7el','Mat. Science'].map{|e| e.tr('.!','')}
# => ["General Motors", "Yahoo", "Le7el", "Mat Science"]

['General Motors','Yahoo!','Le7el','Mat. Science'].map{|e| e.gsub(/[[:punct:]]/,'')}
# => ["General Motors", "Yahoo", "Le7el", "Mat Science"]