Rubyの正規表現でスペース(\s)に一致しない文字列

"260  US$"という文字列からUS$という文字列を一致させて抜き出そうと思ったのですが

> "260  US$".match(/\d+\s+(\S+)/)
#<MatchData "260  US$" 1:" US$">

この様にUS$の前にスペースがどうしても入ってしまい調べたらスペースではなく&nbsp;が入っていたのが原因だったので修正したメモです。

対策方法は文字列(str)の&nbsp;をスペースに変換すればokです。

str.gsub!("\u00A0", " ")

見た目はスペースで区別がつかないので文字列のバイトを表示してみます。

"1"
[49]
"1"
[49]
"8"
[56]
"."
[46]
"2"
[50]
"6"
[54]
"0"
[48]
" "
[32]
" "
[194, 160]
"U"
[85]
"S"
[83]
"$"
[36]

するとスペースっぽい文字列の部分が[32][194, 160]の2種類が出てきました。

調べると[32]がスペース[194, 160]`がNBSP(ノーブレークスペース)との事なのでNBSPをスペースで変換する処理をすれば正規表現でも問題なく処理できるようになりました。

参照