2011-10-18 148 views
0

我試圖解析一些紡織內容:整蠱條件的正則表達式

sample_1 = 
""" 
Pretext 

h1. Primary Header 

h2. Secondary Header 

Content 

""" 

sample_2 = 
""" 
Pretext 

h1. Primary Header 

h2. Secondary Header 

Content 

h1. Another Primary Header 
""" 

以下兩個正則表達式給出相同的,正確的輸出:

p sample_1.match(/(h1\. Primary Header.*)$$/m)[1] #-> "h1. Primary Header\n\nh2. Secondary Header\n\nContent\n\n" 
p sample_2.match(/(h1\. Primary Header.*)h1/m)[1] #-> "h1. Primary Header\n\nh2. Secondary Header\n\nContent\n\n" 

如何使用一個正則表達式對於這兩種情況?以下是不行的,但我不知道爲什麼。

p sample_1.match(/(h1\. Primary Header.*)h1|$$/m)[1] 

回答

0

的原因,你的正則表達式組合不工作是因爲測試*運算符是貪婪的,所以正則表達式將匹配多個部分。

您可以通過使用非貪婪的.*?運算符來避免這種情況。

更可能你應該使用.split代替.match的:

sample_2.split(/(?=^h1\.)/).drop(0) 

使用前瞻使得分割標題之前發生的,而不是包含它。