在 Ruby 中删除非字母数字字符而不删除国际字符

9

我想在一个字符串中删除非字母数字字符,但不删除国际字符,例如重音字母。我还想保留空格。以下是我目前的代码:

the_string = the_string.gsub(/[^a-z0-9 -]/i, '')

这确实可以去除国际音标的字母。

我使用的解决方案:

the_string = the_string.gsub(/[^\p{Alnum}\p{Space}-]/u, '')

它有效了!谢谢。


使用的 Ruby 版本为:ruby 1.9.3p194 - Kevin K
1个回答

12
你可以使用字符属性来实现这个目标:character properties
the_string.gsub(/[^\p{Alnum} -]/, '')

您可能还想使用 \p{Space} 来保留其他空白字符,例如不间断空格等:

the_string.gsub(/[^\p{Alnum}\p{Space}-]/, '')

(这也保留了正则表达式中的 - 字符。)

使用您的第二个示例,我收到了此错误:不兼容的编码正则表达式匹配(ASCII-8BIT正则表达式与UTF-8字符串)。 - Kevin K
@KevinM 请尝试添加u标志以指定正则表达式为utf-8:/[^\p{Alnum}\p{Space}-]/u - matt
Ruby 中不存在这个修饰符。 - Casimir et Hippolyte
@CasimiretHippolyte,u修饰符是什么意思?“正则表达式默认使用源编码。可以使用以下修饰符之一来覆盖此设置。/pat/u - UTF-8” – http://www.ruby-doc.org/core-1.9.3/Regexp.html#class-Regexp-label-Encoding - matt
你说得对,我不知道 Ruby 中有这些修饰符。感谢提供信息。 - Casimir et Hippolyte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接