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

例如,我有:

  • input_string
  • str1_markerstring
  • str2_markerstring

想做一些类似的事情:

input_string.string_between_markers(str1_markerstring, str2_markerString)

示例文本:

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

使用Ruby 1.9.3.

推荐答案

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

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

或者用一种方法:

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"

Ruby相关问答推荐

Rbenv说未安装已安装的版本

Ruby:这两种混入模块方法是否等效?

碰撞检测测试中对象的 Nil 类

Rb:仅通过在 Ruby 中的类上添加 each 方法,可枚举模块是如何工作的?

如何过滤散列数组以仅获取另一个数组中的键?

独立于 Rails 使用 HAML 文件中的布局

如何使用 RSpec 忽略或跳过测试方法?

Ruby 中的字符串是可变的吗?

如何使用 yardoc 列出未记录的模块/类/常量/方法?

Vim 用 ruby​​ 语法高亮显示很慢

Ruby 1.9 - 无效的多字节字符(US-ASCII)

格式化 Ruby 的漂亮打印

有没有办法在 RSpec 中取消存根?

Ruby 与计算机科学相关的 yield 特性

ruby datetime 中有 add_days 吗?

在 Rspec 测试中运行 Rake 任务

在 Ruby 中打开默认浏览器

错误数量的参数(1 代表 0)在 Ruby 中是什么意思?

Ruby Style:如何判断嵌套的哈希元素是否存在

如何在器上下文中运行 ruby​​ 脚本?