UTF-8環境で半角英数字前後の半角スペースを除去する方法

Webなどでは見やすさのために英数字の前後に半角スペースを挿入していることがあるが、
そんな文章から半角スペースを取るプログラムを組みたかった。

たとえば

Java なら Eclipse、.NET なら Visual Studio というツールがあります」なら
JavaならEclipse、.NETならVisual Studioというツールがあります」となる。
Visual Studio」のように、英数字間のスペースは保持したい。

やってみると

SJIS環境なら簡単に組めるのだけど、
KCODE='u'を指定した途端、全くロジックが通用しなくなる。
イコール、Rubyで組んだソースがRailsに流用できない。

結局

いろいろやってみたけど、
一度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文字以上続けると、英数字間でも除去される

良い方法ないかなぁ。。