【发布时间】:2018-10-04 13:35:03
【问题描述】:
在处理包含文本的.tsv 文件时,我有时需要规范化不同类型的空白字符(不间断空格、em 空格等)。
有没有办法匹配所有这些,但不匹配字段分隔符(制表符),因此可以一次处理整个文件,而不将其拆分为列?
【问题讨论】:
在处理包含文本的.tsv 文件时,我有时需要规范化不同类型的空白字符(不间断空格、em 空格等)。
有没有办法匹配所有这些,但不匹配字段分隔符(制表符),因此可以一次处理整个文件,而不将其拆分为列?
【问题讨论】:
字符类\s 和\h 分别匹配所有空格和水平空格。您可以使用否定字符类来排除某些字符,例如 [^\S\t] 或 [^\H\t] – 除制表符之外的所有(水平)空格字符。
这可能是最简单的解决方案,但您也可以使用各种 Unicode 属性。例如,[^\H\p{POSIX_Cntrl}] 将是不是控制字符的所有水平空格字符(制表符是控制字符),并且等效地\p{Zs} 包含所有 Unicode 空格分隔符(也排除制表符)。但是,这些 Unicode 属性都没有明确表明您只想排除制表符。
【讨论】:
\s 匹配任何空格字符,包括制表符 (\t) -> (等于 [\r\n\t\f\v ])
使用[\r\n\f\v ],它将匹配除制表符(\t)之外的所有空白字符。
或使用[\r\f\v ],它将匹配除制表符 (\t) 和换行符 (\n) 之外的所有空格。
【讨论】:
\s charclass 还将匹配 Unicode 空格字符,而不仅仅是您提到的 ASCII 空格字符。