我正在尝试解析一些纺织品内容:
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 :(得分:0)
h1\. Primary Header.*?(?=""")
dotall + multiline 用http://gskinner.com/RegExr/
测试答案 1 :(得分:0)
你的组合正则表达式不起作用的原因是因为。*运算符是贪心的,所以正则表达式将匹配多个部分。
您可以使用非贪婪的.*?
运算符来避免这种情况。
更有可能你应该使用.split而不是.match:
sample_2.split(/(?=^h1\.)/).drop(0)
使用前瞻以便在标题之前进行拆分,而不是包含它。