46 votes

Comment retourner la sous-chaîne d'une chaîne entre deux chaînes en Ruby ?

Comment retourner la chaîne entre deux marqueurs de chaîne d'une chaîne en Ruby ?

Par exemple j'ai :

  • input_string
  • str1_markerstring
  • str2_markerstring

Vous voulez faire quelque chose comme :

 input_string.string_between_markers(str1_markerstring, str2_markerString)

Exemple de texte :

 s
# => "Charges for the period 2012-01-28 00:00:00 to 2012-02-27 23:59:59:<br>\nAny Network Cap remaining: $366.550<br>International Cap remaining: $0.000"
str1_markerstring
# => "Charges for the period"
str2_markerstring
# => "Any Network Cap"
s[/#{str1_markerstring}(.*?)#{str2_markerstring}/, 1]
# => nil  # IE DIDN'T WORK IN THIS CASE

Utiliser Ruby 1.9.3.

92voto

sawa Points 62592
input_string = "blahblahblahSTARTfoofoofooENDwowowowowo"
str1_markerstring = "START"
str2_markerstring = "END"

input_string[/#{str1_markerstring}(.*?)#{str2_markerstring}/m, 1]
#=> "foofoofoo"

ou pour le mettre dans une méthode :

 class String
  def string_between_markers marker1, marker2
    self[/#{Regexp.escape(marker1)}(.*?)#{Regexp.escape(marker2)}/m, 1]
  end
end

"blahblahblahSTARTfoofoofooENDwowowowowo".string_between_markers("START", "END")
#=> "foofoofoo"

14voto

larry Points 144

Il suffit de le diviser deux fois et d'obtenir la chaîne entre les marqueurs :

 input_string.split("str1_markerstring").last.split("str2_markerstring").first

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X