RegEx用于在标记集

时间:2017-11-09 01:08:04

标签: regex html-parsing regex-lookarounds regex-greedy regex-group

<info>
<owner>
<p>Owners:</p>
<p>1. New Owner_1</p>
<p>2. New Owner_2</p>
</owner>
<addons>
<p>Name of dog: Alex</p>
<p>1. Text blah blah blah</p>
<p>2. Text blah blah blah</p>
<p>3. Text blah blah blah</p>
<p>4. Text blah blah blah</p>
<p>OR MORE Text blah blah blah</p>
</addons>
<p>DETAILS</p>
<p>1. Vicky Mears 1st dog's owner.</p>
<p>2. Paul Nash 2nd dog's owner.</p>
<p>3. Dog found last Apr. 2016</p>
</info>

嗨,我目前正在学校学习正则表达式。我的老师在上面显示的结构中指出了一个问题。

他问我们如何寻找:

<p>1. ...</p>
<p>2. ...</p>
<p>3. ...</p>

但不在里面:

<p>DETAILS</p>
<p>1. Vicky Mears 1st dog's owner.</p>
<p>2. Paul Nash 2nd dog's owner.</p>
<p>3. Dog found last Apr. 2016</p>
</info>

<owner></owner>, <addons></addons>标记在某些时候会有所不同,因此不需要指定母标记,只需排除以下所有内容:

<p>DETAILS</p>
<p>1. Vicky Mears 1st dog's owner.</p>
<p>2. Paul Nash 2nd dog's owner.</p>
<p>3. Dog found last Apr. 2016</p>
</info>

我用这个

(?s)<p>DETAILS</p>(.*?)</info> 

但它找到了我要排除的那个。

任何人都可以帮我解决这个问题吗? stackoverflow是我的最后一招。

PS:仅在Notepad ++ v6.8.3中使用RegEx进行搜索

1 个答案:

答案 0 :(得分:0)

我会这样做

<p>DETAILS[\s\S]*|(<p>.*?<\/p>)|.*

演示:https://regex101.com/r/IB9QFu/1/

我们的想法是使用布尔值OR |来匹配DETAILS之后发生的任何事情,然后开始匹配<p>..</p>

你可以 - 记事本++ - Replace All $1只保留所需的<p>..</p>

如果您想在RegExr中进行测试,请使用此代码

/<p>DETAILS[\s\S]*|(<p>.*?<\/p>)|^.*$/gm