2010-11-25 8 views
1
string = 

" 
[title] 

{snippet} 

[something else in bracket] 

{something else} 

more text 

#tags 
" 

Je veux supprimer la première occurrence de [] et {}supprimer de la chaîne première occurrence de caractère donné

s.clean_method ou regexp doit retourner la chaîne comme

" 
title 

snippet 

[something else in bracket] 

{something else} 

more text 

#tags 
" 

Langue Ruby 1.9 .2

Répondre

1

Plus du même:

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

Eh bien, si c'est tout ce que vous voulez faire, tout ce que vous devez faire est

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

Bien sûr, c'est une solution terriblement inélégant, et ne considère pas les choses comme les supports inégalés, etc.

Une meilleure solution serait probablement:

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

Cela pourrait probablement être simplifiée, mais c'est ce qui vient du haut de ma tête :)

BTW, si vous voulez remplacer tous les cas, tout ce que vous devez faire est d'utiliser gsub au lieu de sub

4

Vous avez besoin String#sub (non gsub):

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