2011-10-18 59 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) 

使用前瞻使得分割标题之前发生的,而不是包含它。