Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to return the substring of a string between two strings in Ruby?

Tags:

regex

ruby

How would I return the string between two string markers of a string in Ruby?

For example I have:

  • input_string
  • str1_markerstring
  • str2_markerstring

Want to do something like:

input_string.string_between_markers(str1_markerstring, str2_markerString) 

Example text:

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 

Using Ruby 1.9.3.

like image 915
Greg Avatar asked Mar 12 '12 03:03

Greg


People also ask

How do you extract a substring from a string in Ruby?

There is no substring method in Ruby, and hence we rely upon ranges and expressions. If we want to use the range, we have to use periods between the starting and ending index of the substring to get a new substring from the main string.

How do you compare two strings in Ruby?

Two strings or boolean values, are equal if they both have the same length and value. In Ruby, we can use the double equality sign == to check if two strings are equal or not. If they both have the same length and content, a boolean value True is returned. Otherwise, a Boolean value False is returned.

What does =~ mean in Ruby?

=~ is Ruby's pattern-matching operator. It matches a regular expression on the left to a string on the right. If a match is found, the index of first match in string is returned. If the string cannot be found, nil will be returned.


1 Answers

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

or to put it in a method:

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" 
like image 157
sawa Avatar answered Sep 26 '22 00:09

sawa