Ruby /\s未转义空格/

Ruby /\s未转义空格/,ruby,regex,whitespace,Ruby,Regex,Whitespace,我正在处理一些行为奇怪的字符串 ruby中正则表达式中的/s无法识别某些空格 "175  75   16C  101/99    R".gsub( /\s/ , 'x' ) => "175 x75  x16C x101/99   xR" 预期结果应该是每个空格都转换为“x” 我试图强制将UTF-8编码为字符串,但也不起作用。我需要一个正则表达式来匹配字符串中的每种空格,并将它们转换为常规空格 编辑: 从我的理解来看,这个问题是你想把所有的空格都转换成x。您当前的正则表达式仅根据搜索AS

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

ruby中正则表达式中的/s无法识别某些空格

"175  75   16C  101/99    R".gsub( /\s/ , 'x' )
 => "175 x75  x16C x101/99   xR"
预期结果应该是每个空格都转换为“x”

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

编辑:


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

Unicode正则表达式

"175  75   16C  101/99    R".gsub(/[[:space:]]/ , 'x' )
"175xx75xxx16Cxx101/99xxxxR"
根据,
\s
[\t\r\n\f]
的简写形式(只有几个ASCII空白字符)


如果您的模式包含其他空白字符,例如不间断空格,您可以将
\s
替换为
\p{Z}
,这将查找Unicode分隔符字符属性,从而匹配所有字符。

对我来说非常合适:
“175xx75xxx16cx101/99xxxxR”
我不知道Ruby,但您可以尝试
\p{Z}
(所有Unicode空格)。我不知道Ruby与
\p{Z}
相比如何处理
\s
。请报告以下结果:1)
str.gsub(/./){c |(c=~/\s/|仅c.ascii|?'x':'}
和2)
str encode('utf-8')。chars.each{c{124;放入c.ord,其中
str 75…”
@CarySwoveland c.ord给我160英镑买奇怪的whitespaces@August,当然,如果你从浏览器中复制/粘贴它会起作用……哦,我明白你的意思了,刚刚醒来:
/[[:space:]/
字符串没有找到unicode空格吗?我相信你关于
[[:space]]
的说法是正确的。我建议你把答案限制在那一点上。请注意,将其应用于从屏幕上刮下的(ASCII)字符串并不是一个测试。感谢您的参考。
"175  75   16C  101/99    R".gsub(/[[:space:]]/ , 'x' )
"175xx75xxx16Cxx101/99xxxxR"