我正在处理一些行为奇怪的字符串。
红宝石中的正则表达式中的/ 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
答案 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"