没有被/ \ s /转义的空格

时间:2014-11-04 23:07:28

标签: ruby regex whitespace

我正在处理一些行为奇怪的字符串。

红宝石中的正则表达式中的/ s无法识别某些空格。

"175  75   16C  101/99    R".gsub( /\s/ , 'x' )
 => "175 x75  x16C x101/99   xR"

预期的结果是每个空格都转换为'x'

我试图强制将UTF-8编码为字符串,但它也无法正常工作。我需要一个与我的字符串中的每种空格相匹配的正则表达式,并将它们转换为常规空格。

编辑:

str.encode('utf-8').chars.each { |c| puts c.ord }     
49
55
53
160
32
55
53
160
160
32
49
54
67
160
32
49
48
49
47
57
57
160
160
160
32
82

2 个答案:

答案 0 :(得分:5)

根据Ruby docs\s[ \t\r\n\f]的简写(只有几个ASCII空白字符)。

如果您的模式包含其他空格字符,例如非中断空格,则可以将\s替换为\p{Z},这将查找Unicode Separator 字符属性,因此将匹配所有Unicode-defined whitespace characters

答案 1 :(得分:3)

从我对这个问题的理解是你想要将所有空格转换为x。根据{{​​3}},您当前的正则表达式仅搜索ASCII /[ \t\r\n\f]/。要支持Unicode,您需要为空白字符[[:space:]]使用特殊的Unicode标识符。

Unicode正则表达式

"175  75   16C  101/99    R".gsub(/[[:space:]]/ , 'x' )
"175xx75xxx16Cxx101/99xxxxR"