8

当我对使用 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 "

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

4

4 回答 4

17

简单的正则表达式可以:

@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** "
于 2012-11-02T10:37:29.590 回答
4

使用 Victor 给出的相同正则表达式,您也可以这样做

var.split(/container_start(.*?)container_end/)[1]
于 2015-01-23T15:35:04.540 回答
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 部分。

于 2016-02-01T03:33:59.027 回答
0

我只是想添加一些我从这里得到的重要内容

@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)
于 2020-02-22T17:22:59.790 回答