2013-11-07 2 views
0

Я пытаюсь написать регулярное выражение, которое достигает следующее:Как написать регулярное выражение для gsub, которое сохраняет пробелы, буквы и цифры, но удаляет знаки препинания?

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

Я попытался простой «/ \ W + $ /», но улавливает знаки препинания в конце строки только, к сожалению.

+0

Это потому, что вы указали его. '$' привязывает конец строки, поэтому вы пытаетесь сопоставить 1 или несколько символов без слов в конце строки. – SQB

ответ

1

Если вам нужно быть Юникод затем использовать свойство «Punct»:

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

Это будет работать так же хорошо с простой ASCII знаков препинания.

+0

awesome, большое спасибо! –

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"] 
+0

это работает, да. Я надеялся на регулярное выражение, потому что хочу удалить все символы без слова/без пробелов. –

+0

@RingoBlancke см. Мое обновление –

1

Попробуйте s/[^\w\s]//g, он должен заменить все без слов и без пробелов с пустой строкой.

При необходимости укажите, что именно вы считаете допустимыми, например, s/[^A-Za-z0-9 ]//g.


Окей, так что Perl, но это думал регулярное выражение, которое рассчитывает.

Смежные вопросы