2012-11-02 98 views
6

我想知道如何繼續,當我對使用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)內的資本含量

+0

您正在使用哪種技術? – RAJ

+0

謝謝,在rails上工作ruby –

+0

如果你看看html標籤匹配正則表達式,你可能會知道如何去抓它。 – HungryCoder

回答

13

簡單的正則表達式會做:

@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** " 
+0

感謝您的答案,這是一個爆炸。 –

+0

如果我還沒有找到這篇文章(或類似的文章),我將如何找到這個答案?這讓我覺得這是一個不太直觀的解決方案。只是好奇。 – Tass

+0

@ victor-deryagin ..我是新手,這是一個非常基本的問題,爲什麼在正則表達式中使用1, – twinkle

3

使用同樣的正則表達式由Victor給出,你也可以做

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

只需提供非正則表達式答案,您也可以使用兩個.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部分。

相關問題