【问题标题】:Perl regex to match different types of space characters but not tabulationPerl 正则表达式匹配不同类型的空格字符但不匹配制表
【发布时间】:2018-10-04 13:35:03
【问题描述】:

在处理包含文本的.tsv 文件时,我有时需要规范化不同类型的空白字符(不间断空格、em 空格等)。 有没有办法匹配所有这些,但不匹配字段分隔符(制表符),因此可以一次处理整个文件,而不将其拆分为列?

【问题讨论】:

    标签: regex perl unicode


    【解决方案1】:

    字符类\s\h 分别匹配所有空格和水平空格。您可以使用否定字符类来排除某些字符,例如 [^\S\t][^\H\t] – 除制表符之外的所有(水平)空格字符。

    这可能是最简单的解决方案,但您也可以使用各种 Unicode 属性。例如,[^\H\p{POSIX_Cntrl}] 将是不是控制字符的所有水平空格字符(制表符是控制字符),并且等效地\p{Zs} 包含所有 Unicode 空格分隔符(也排除制表符)。但是,这些 Unicode 属性都没有明确表明您只想排除制表符。

    【讨论】:

      【解决方案2】:

      \s 匹配任何空格字符,包括制表符 (\t) -> (等于 [\r\n\t\f\v ])

      使用[\r\n\f\v ],它将匹配除制表符(\t)之外的所有空白字符。

      或使用[\r\f\v ],它将匹配除制表符 (\t) 和换行符 (\n) 之外的所有空格。

      【讨论】:

      • 您的答案对于 ASCII 是正确的,但不考虑问题中提到的不间断空格或 em 空格等 Unicode 字符。 \s charclass 还将匹配 Unicode 空格字符,而不仅仅是您提到的 ASCII 空格字符。
      猜你喜欢
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多