Perl正则表达式匹配不同类型的空格字符但不匹配制表

时间:2018-04-24 10:17:51

标签: regex perl unicode

当处理包含文本的.tsv文件时,我有时需要规范化不同类型的空白字符(非中断空格,em-space等)。 有没有办法匹配所有这些,但不是字段分隔符(选项卡),所以可以一次处理整个文件,而不将其拆分成列?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-1)

routerLink = "cart-items/{{card.id}}" 匹配任何空白字符,包括标签(\s) - > (等于\t

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

或者使用\t除了标签([\r\f\v ])和换行符(\t)之外的所有空格。