2013-07-22 43 views
1

我想從字符串中移除所有非字母數字字符。除了空間,還有一些德語字符。正則表達式非字母數字但不是德文字符

regexp = "mönchengladbach." 
regexp.gsub(/[^0-9a-z \-]/i, '') 
=> mnchengladbach 

我需要這樣的:

=> mönchengladbach 

它也不能代替其他德國字符如:

ä ö ü ß 

謝謝!

編輯:

這只是我沒有正確測試。 IRB不接受特殊字符。這個工作對我來說:

regexp.gsub(/[^0-9a-z \-äüöß]/i, '') 

回答

3

要刪除所有這不是一個字母,或者你可以使用這個空間:

str.gsub(/[^\p{L}\s]+/, '') 

我在這裏使用一個否定的字符類,[^\p{L}\s]意味着所有不信(你想要的所有語言)或白色系統字符(空格,製表,新行)

\p{L}是對文學的Unicode字符類。

您可以輕鬆地添加其他字符要保留像-

str.gsub(/[^\p{L}\s-]+/, '') 

示例腳本:

# encoding: UTF-8 

str = "mönchengladbach." 

str = str.gsub(/[^\p{L}\s]+/, '#') 

puts str 
+0

它似乎{L}不存在於紅寶石? – Hendrik

+0

@Hendrik:它在Ruby 1.9上受支持,但在舊版本中不支持。 –

+1

@Hendrik:您必須在腳本開始時添加編碼,請參閱我的示例。 –

0

我想你想:

/[^[:alnum:] -]/ 

注意//i是沒有必要也沒有必要逃脫-當它在一個[]

相關問題