Ruby 2.4。我希望通过多个空格分割一条线,即多个单个断开或不间断的空间,或者不是单个空格的空白区域(如制表符或新行)。我尝试了下面的
tokens_by_spaces = line.split(/\s\s+/)
但这失败了。例如,如果行是
"A B\tC D"
以上返回
["A B\tC D"]
而我希望它返回
["A B", "C D"]
同样,如果我的行是
"ab c def g"
我希望结果是
["ab c", "def g"]
答案 0 :(得分:2)
我建议使用
/[ \u00A0]*(?:[[:space:]&&[^ \u00A0]][ \u00A0]*)+|[[:space:]]{2,}/
请参阅regex demo。
虽然\s
似乎可以匹配任何Unicode空白,如果模式前缀为(?u)
,[[:space:]]
似乎是一种更常用的方式来匹配任何Unicode空格。
<强>详情:
该模式有2个与...匹配的分支。
[ \u00A0]*(?:[[:space:]&&[^ \u00A0]][ \u00A0]*)+
- 一大块包含至少1个非空格/非空间空格的空格
[ \u00A0]*
- 零次或多次出现常规或不间断的空格(?:[[:space:]&&[^ \u00A0]][ \u00A0]*)+
- 一次或多次出现:
[[:space:]&&[^ \u00A0]]
- (字符类减法)除常规/不间断空格外的任何空格[ \u00A0]*
- 零个或多个常规/非破坏空格|
- 或[[:space:]]{2,}
- 2个或更多任何空格符号