棘手的条件正则表达式

时间:2011-10-18 22:46:48

标签: ruby regex

我正在尝试解析一些纺织品内容:

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]

2 个答案:

答案 0 :(得分:0)

h1\. Primary Header.*?(?=""")

dotall + multiline 用http://gskinner.com/RegExr/

测试

答案 1 :(得分:0)

你的组合正则表达式不起作用的原因是因为。*运算符是贪心的,所以正则表达式将匹配多个部分。

您可以使用非贪婪的.*?运算符来避免这种情况。

更有可能你应该使用.split而不是.match:

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

使用前瞻以便在标题之前进行拆分,而不是包含它。