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

Posted

技术标签:

【中文标题】有没有办法匹配任何 Unicode 字母字符?【英文标题】:Is There a Way to Match Any Unicode Alphabetic Character? 【发布时间】:2011-08-25 17:10:49 【问题描述】:

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

有没有办法制作一个匹配任何 unicode 字母字符(来自任何语言的字母)的正则表达式?还是只匹配非字母字符?任何一个都会非常有帮助和真棒。我正在使用 Perl,如果这改变了任何东西。谢谢!

【问题讨论】:

【参考方案1】:

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

\pL

将匹配任何字母或表意文字。您可能还想包含带有标记的字母,所以您可以这样做

\pL\pM*

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

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

【讨论】:

同理,您可以使用\P 匹配具有特定属性的字符not(因此\PL 匹配任何非字母字符)。 我可以使用省略一些代码点的字符代码吗?像 \pP 省略句点和逗号?否定它对我来说是完美的。【参考方案2】:

根据您使用的语言,正则表达式引擎可能支持也可能不支持 Unicode。如果是,它可能知道也可能不知道\p 属性标记。如果是,您的答案在Unicode Characters and Properties in Jan Goyvaerts' regex tutorial。

如果支持,您可以使用\pLatin 来检测所有(当然不是)来自使用任何 Unicode 拉丁块的语言的所有内容。

【讨论】:

以上是关于有没有办法匹配任何 Unicode 字母字符?的主要内容,如果未能解决你的问题,请参考以下文章

仅匹配 Python re 中的 unicode 字母

用 Java 正则表达式匹配(例如)一个 Unicode 字母

htaccess重写规则,带有unicode字母的参数

JS - 字符编码 (ASCII,Unicode,UTF-8)

有没有办法列出 perluniprops 中的所有类别?

如何比较包含非英文字符的 unicode 字符串以按字母顺序排序?