0

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

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

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

4

3 回答 3

1

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

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


好的,这就是 Perl,但重要的是思想正则表达式。

于 2013-11-07T18:59:19.933 回答
1

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

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

这也适用于简单的 ASCII 标点符号。

于 2013-11-07T19:02:28.250 回答
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"]
于 2013-11-07T18:51:52.283 回答