2010-11-25 11 views
1
string = 

" 
[title] 

{snippet} 

[something else in bracket] 

{something else} 

more text 

#tags 
" 

ich zum ersten Auftreten von [] und {}aus Zeichenfolge Löschen des ersten Auftretens gegebenen Zeichen

s.clean_method oder regexp sollte Zeichenfolge wie die

" 
title 

snippet 

[something else in bracket] 

{something else} 

more text 

#tags 
" 

Sprache Ruby-Rückkehr 1.9 löschen möchten 0,2

Antwort

1

Mehr vom Gleichen:

s = "[asd]{asd}[asd]{asd}" 
%w({ } [ ]).each{|char| s.sub!(char,'')} 
#=> "asdasd[asd]{asd}" 
0

Nun, wenn das alles ist, was Sie tun wollen, alles, was Sie tun müssen, ist

result = string.sub('{', '').sub('[', '').sub('}', '').sub(']', '') 

Natürlich ist das eine schrecklich unelegant Lösung, und betrachtet die Dinge nicht wie unerreichte Klammern etc.

Eine bessere Lösung wäre wahrscheinlich:

pattern1 = /\{(.*?)\}/ 
pattern2 = /\[(.*?)\]/ 
match1 = pattern1.match(string) 
result = string.sub(match1[0], match1[1]) 
match2 = pattern2.match(result) 
result = result.sub(match2[0], match2[1]) 

wahrscheinlich vereinfacht werden, aber das ist Dies könnte was kommt aus der Spitze von meinem Kopf :)

BTW, wenn Sie alle Instanzen ersetzen wollen, alles, was Sie tun müssen, um gsub anstelle von sub

4

Sie benötigen String#sub (nicht gsub):

irb> "[asd]{asd}[asd]{asd}".sub(/\[(.+?)\]/,'\1').sub(/\{(.+?)\}/,'\1') 
=> "asdasd[asd]{asd}" 
Verwandte Themen