如何在Ruby中的两个字符串之间返回字符串的子串?

Gre*_*reg 38 ruby regex

如何在Ruby中的字符串的两个字符串标记之间返回字符串?

例如,我有:

  • input_string
  • str1_markerstring
  • str2_markerstring

想做类似的事情:

input_string.string_between_markers(str1_markerstring, str2_markerString)
Run Code Online (Sandbox Code Playgroud)

示例文字:

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
Run Code Online (Sandbox Code Playgroud)

saw*_*awa 78

input_string = "blahblahblahSTARTfoofoofooENDwowowowowo"
str1_markerstring = "START"
str2_markerstring = "END"

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

或者把它放在一个方法中:

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"
Run Code Online (Sandbox Code Playgroud)

  • 一般来说这很好,但是对于最终实现,应该在标记上使用Regexp.escape. (2认同)

小智 8

只需将其拆分两次即可获得标记之间的字符串:

input_string.split("str1_markerstring").last.split("str2_markerstring").first
Run Code Online (Sandbox Code Playgroud)

  • 地狱是的,如果你可以拆分正则表达式 (2认同)