UTF-8環境で半角英数字前後の半角スペースを除去する方法
Webなどでは見やすさのために英数字の前後に半角スペースを挿入していることがあるが、
そんな文章から半角スペースを取るプログラムを組みたかった。
たとえば
「Java なら Eclipse、.NET なら Visual Studio というツールがあります」なら
「JavaならEclipse、.NETならVisual Studioというツールがあります」となる。
「Visual Studio」のように、英数字間のスペースは保持したい。
結局
いろいろやってみたけど、
一度SJISに置き換えて、スペースを抜き、
最終的にUTFに置き換え直すという力業で解決した。
まずは全角文字の後ろにあるスペースを取り、次に全角スペースの前にあるスペースを取る。
require='kconv' def strip_s(text) text = text.tosjis if (/\W\s+\w/ =~ text) text.scan(/\W\s+\w/){ |matched| buf = matched.gsub(/\s+/, "") text = text.sub(matched, buf) } end if (/\w\s+\W/ =~ text) text.scan(/\w\s+\W/){ |matched| buf = matched.gsub(/\s+/, "") text = text.sub(matched, buf) } end return text.toutf8 end
もっとよさそうな方法があるけど、今の自分にはこれが精一杯…。
つーか5時間くらいかかった。(KCODEが原因だと気づくのに4時間…)
2段階の操作も後々の拡張性を考えて。
もしかしたら記号(ピリオドとか、\マークとか)を処理するかもしれないので。
追記
やっぱこれダメだわ(笑)
- 全角文字の後ろにあるスペースが取れない
- 半角スペースを2文字以上続けると、英数字間でも除去される
良い方法ないかなぁ。。