获取两个特定单词之间包含的子字符串

时间:2012-11-02 09:31:33

标签: ruby regex ruby-on-rails-3 substring

当我对使用ruby的特定单词之间包含的文本感兴趣时,我想知道如何继续。 例如

@var = "Hi, I want to extract container_start ONLY THIS DYNAMIC CONTENT container_end from the message contained between the container_start and container_end "

现在我想从字符串中提取CAPITALIZED内容,即动态但始终包含在两个容器中(container_startcontainer_end

4 个答案:

答案 0 :(得分:15)

简单的正则表达式可以:

@var = "Hi, I want to extract container_start **ONLY THIS DYNAMIC CONTENT** container_end from the message contained between the container_start and container_end "
@var[/container_start(.*?)container_end/, 1] # => " **ONLY THIS DYNAMIC CONTENT** "

答案 1 :(得分:3)

使用Victor提供的相同正则表达式,您也可以

var.split(/container_start(.*?)container_end/)[1]

答案 2 :(得分:2)

为了提供非正则表达式的答案,您还可以使用两个.splits选择数组条目。

=> @var = "Hi, I want to extract container_start ONLY THIS DYNAMIC CONTENT container_end from the message contained between the container_start and container_end "
=> @var.split("container_start ")[1].split(" container_end")[0]
=> "ONLY THIS DYNAMIC CONTENT"

.split将字符串拆分为引号中的文本。 [1]选择该文本后的部分。对于第二次剪切,您需要“container_end”之前的部分,以便选择[0]。

您需要将两个.split子字符串中的空格留下以删除前导和尾随空格。或者,使用.lstrip和.rstrip。

如果有更多“container_start”和“container_end”字符串,则需要调整数组选择器以在这两个子字符串之间选择正确的@var部分。

答案 3 :(得分:0)

我只想添加从here中获得的重要信息

@var = "Hi, I want to extract container_start \n\nONLY \nTHIS\n DYNAMIC\n CONTENT\n\n container_end from the message contained between the container_start and container_end "
@var[/container_start(.*?)container_end/m, 1]

请注意以下事项:

/./ - Any character except a newline.
/./m - Any character (the m modifier enables multiline mode)