有没有办法匹配任何Unicode非字母字符?

时间:2011-05-14 23:32:55

标签: regex perl unicode character-properties

我有一些文档经过OCR从PDF转换为HTML。因此,他们最终有很多随机的unicode标点,转换器搞砸了(即elipses等)。他们也正确地拥有一堆非英语,但仍然是字母字符,如é,俄语字符等......

有没有办法让Regex匹配任何unicode字母字符(来自任何语言的字母)?或者只匹配非字母字符的那个?任何一个都会非常有用而且非常棒。我正在使用Perl,如果这改变了什么。谢谢!

2 个答案:

答案 0 :(得分:27)

查看Unicode字符属性:http://www.regular-expressions.info/unicode.html#prop。我认为您正在寻找的可能是

\p{L}

将匹配任何字母或表意符号。您可能还希望在其上添加带标记的字母,这样就可以了

\p{L}\p{M}*

在任何情况下,第一个链接中都会详细说明所有不同类型的字符属性。

编辑:您可能还想查看此Stack Overflow答案,讨论\ w是否与unicode字符匹配。他们建议您也可以使用\ p {Word}或\ p {Alnum}:Does \w match all alphanumeric characters defined in the Unicode standard?

答案 1 :(得分:2)

根据您使用的语言,正则表达式引擎可能具有或不具有Unicode识别功能。如果是,则可能知道或不知道\p{}属性令牌。如果有,您的答案就在Unicode Characters and Properties in Jan Goyvaerts' regex tutorial

如果支持,您可以使用\p{Latin}来检测使用任何Unicode拉丁语块的语言(或者当然不是)。