有没有办法匹配任何 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 字母字符?的主要内容,如果未能解决你的问题,请参考以下文章
用 Java 正则表达式匹配(例如)一个 Unicode 字母