正则表达式非字母数字但不是德语字符

时间:2013-07-22 23:28:10

标签: ruby regex

我想从字符串中删除所有非字母数字字符。除了空间,还有一些德国人物。

实施例

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

我需要这个:

=> mönchengladbach

它也不应取代其他德语字符,例如:

ä ö ü ß

谢谢!

编辑:

只是我没有正确测试。 IRB不接受特殊字符。这对我有用:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我想你想要:

/[^[:alnum:] -]/

请注意,//i不是必需的,在-

结束时无需转义[]