2012-04-05 2 views
2

이것은 매우 간단합니다 : 어떻게 특수 문자의 루비 문자열을 제거 할 수 있습니까? 여기에 캐릭터의 : http://www.fileformat.info/info/unicode/char/2028/index.htm특정 제어 문자의 스트립 루비 문자열

는 그리고 여기 기간 사이에 두 개의 특수 문자와 종료 견적, 문자열이다 : 나는 실패이 시도했습니다

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

" 

:

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

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

루비를 사용하고 있습니다. 1.9.3p125

+0

GSUB ("/ \ n /", "") 이상이 더 일반적이고 덜 효율적인가요? – Ascherer

+0

@Ascherer가 작동하지 않습니다. ( – nnyby

+0

\ x1F^_ (단위 구분자, 정보 분리 자) ...... 여기에 가십시오 http://donsnotes.com/tech/charsets/ascii.html – zee

답변

1

나는 그것을 이해했다! .gsub(/\u2028/, '')

+0

나는 거의 그것을 게시했습니다. 먼저, 루비가 그걸 할 수 있는지 알지 못 했어. – Ascherer

+0

버전 1.8.6을 사용했다면, 유니 코드를 완벽하게 지원하지 못했기 때문에 그렇게 할 수 없었습니다. – 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)