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

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)之间。

你使用的是哪种技术? - RAJ
谢谢,正在开发 Ruby on Rails。 - Nishutosh Sharma
如果你研究HTML标签匹配正则表达式,你可能会知道如何抓取它。 - HungryCoder
请根据您的需求修改以下Ruby代码以从字符串中提取子字符串:https://dev59.com/Mm855IYBdhLWcg3w1oLa - Anand Shah
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** "

感谢您的回答,非常准确。 - Nishutosh Sharma
如果我没有找到这篇文章(或类似的文章),我怎么会找到这个答案呢?这对我来说似乎不是很直观的解决方案。只是好奇。 - Tass
@victor-deryagin.. 我是新手,所以问一个非常基础的问题,为什么在正则表达式中要使用1? - Hridya

4
使用Victor提供的相同正则表达式,您也可以执行以下操作:
var.split(/container_start(.*?)container_end/)[1]

2

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

=> @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在这两个子字符串之间的正确部分。


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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接