2012-04-05 9 views
2

これはかなり簡単です:どうすれば特殊文字のルビ文字列を取り除くことができますか?ここでは文字があります:私は失敗し、これを試してみた特定の制御文字のルビ文字列を取り除く

"Each of the levels requires logic, skill, and brute force to crush the enemy.

" 

http://www.fileformat.info/info/unicode/char/2028/index.htm

そしてここでは、期間と終了引用符の間に2つの特殊文字を含む文字列、です

string.gsub!(/[\x00-\x1F\x7F]/, '') 

gsub("/\n/", "")

ルビーを使用しています。1.9.3p125

+0

GSUB( "/ \ N /"、 "")で、より一般的かつ非効率的であるのだろうか? – Ascherer

+0

@Aschererは動作しません:( – nnyby

+0

\ x1F^_(ユニットセパレータ、情報セパレータ1)......ここに行くhttp://donsnotes.com/tech/charsets/ascii.html – zee

答えて

1

私はそれを理解しました! .gsub(/\u2028/, '')

+0

まず、rubyがそのことを行うことができるかどうかを知りませんでした – Ascherer

+0

バージョン1.8.6を使用していた場合、完全なUnicodeサポートがないのでできませんでした。 – Matt

6

String#gsub動作しますが、これよりもString#tr

irb> s ="Hello,\u2028 World; here's some ctrl [\1\2\3\4\5\6] chars" 
=> "Hello,\u2028 World; here's some ctrl [\u0001\u0002\u0003\u0004\u0005\u0006] chars" 

irb> s.tr("\u0000-\u001f\u007f\u2028",'') 
=> "Hello, World; here's some ctrl [] chars" 

require 'benchmark' 
Benchmark.bm {|x| 
    x.report('tr') { 1_000_000.times{ s.tr("\u0000-\u001f\u007f\u2028",'') } } 
    x.report('gsub') { 1_000_000.times{ s.gsub(/[\0-\x1f\x7f\u2028]/,'') } } 
} 

      user  system  total  real 
tr 1.440000 0.000000 1.440000 ( 1.448090) 
gsub 4.110000 0.000000 4.110000 ( 4.127100) 
関連する問題