3

Ruby の StringScanner を使用して、英語のテキストを正規化しています。

def normalize text
  s = ''
  ss = StringScanner.new text
  while ! ss.eos? do
    s += ' ' if ss.scan(/\s+/)             # mutiple whitespace => single space
    s += 'mice' if ss.scan(/\bmouses\b/)   # mouses => mice
    s += '' if ss.scan(/\bthe\b/)          # remove 'the'
    s += "#$1 #$2" if ss.scan(/(\d)(\w+)/) # should split 3blind => 3 blind
  end
  s
end

normalize("3blind the   mouses")  #=> should return "3 blind mice"

代わりに、私はちょうど得て" mice"います。

StringScanner#scanと をキャプチャしていませ(\d)(\w+)

4

2 に答える 2

2

注:コメントスレッドによると、これ/私の回答の最初のバージョンは完全にベースから外れていました。申し訳ありません。

http://ruby-doc.org/stdlib-1.9.2/libdoc/strscan/rdoc/StringScanner.htmlの実験とレビューに基づいて、一致変数、などをStringScanner設定していないように見えるため、最後のステートメントに空白を追加するだけです。$1$2s += ...s

それを見るとstrscan.c、実際にはキャプチャされた一致情報を提供するためのサポートがないように見えますが、 https://www.ruby-forum.com/topic/4413436を見つけました。これは、実装するための何らかの進行中の取り組みのようですこれ

于 2013-11-14T22:32:16.550 に答える