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

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

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

【问题讨论】:

    标签: regex perl unicode character-properties


    【解决方案1】:

    查看 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?

    【讨论】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2021-06-10
      相关资源
      最近更新 更多