有没有一种方法可以匹配任何Unicode字母字符?

28

我有一些文档,它们已经从PDF转换成HTML,并使用OCR技术进行了转换。因此,它们会出现许多随机的Unicode标点符号,这是转换器混乱导致的(例如省略号等)。它们还正确地包含了大量的非英语但仍为字母字符,例如é和俄文字母等。

是否有办法创建一个正则表达式,可以匹配任何语言字母表中的Unicode字母字符?或者只匹配非字母字符的正则表达式?两种情况都会非常有用。如果使用Perl,则需要进行更改。谢谢!

2个回答

45

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

\p{L}

这将匹配任何字母或表意文字。您可能还想包括带标记的字母,那么您可以这样做:

\p{L}\p{M}*

无论如何,所有不同类型的字符属性都在第一个链接中详细说明。

编辑:您可能还想查看这个Stack Overflow答案,讨论\w是否匹配Unicode字符。他们建议您也可以使用\p{Word}或\p{Alnum}:\w是否匹配Unicode标准中定义的所有字母数字字符?


2
同样地,您可以使用\P来匹配没有特定属性的字符(因此,\P{L}匹配任何非字母字符)。 - John Flatness
我能否使用字符代码省略一些代码点?比如 \p{P} 省略句号和逗号?它们的否定对我来说更完美。 - Eli

2
根据你使用的语言,正则表达式引擎可能具有或不具有 Unicode 功能。如果有,它可能会或者不会识别 \p{} 属性标记。如果它支持,可以使用 \p{Latin} 来检测所有属于(当然也包括不属于)任何 Unicode 拉丁字符块的语言的内容。有关更多信息,请参见 Jan Goyvaerts 的正则表达式教程中的 Unicode Characters and Properties

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