2013-07-22 48 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是没有必要也没有必要逃脱-当它在一个[]

相关问题