【问题标题】:How do I select multiple lines in a regular expression?如何在正则表达式中选择多行?
【发布时间】:2017-07-28 21:23:32
【问题描述】:

我有一些遵循这种模式的 HTML:

<p>1. ALLCAPSTEXT1 - etc etc</p>
<p>01. lowercasetext1 - etc etc</p>
<p>02. lowercasetext1 - etc etc</p>
<p>2. ALLCAPSTEXT2 - etc etc</p>
<p>01. lowercasetext2 - etc etc</p>
<p>02. lowercasetext2 - etc etc</p>
<p>03. lowercasetext2 - etc etc</p>
<p>3. ALLCAPSTEXT3 - etcetc</p>
<p>01. lowercasetext3 - etc etc</p>

“ALLCAPSWORD”行之后的行数会有所不同,因此它可以是 1 到 10+ 之间的任意值。我想用这种模式选择所有这些行(最多 100 多行)。

到目前为止我有:

<p>(\d+)\.\s[A-Z][A-Z]+(.+)</p>\n+<p>(.+)</p>\n+<p>\d+\.\s[A-Z][A-Z]+(.+)</p>

第一个 p 标签中的内容捕获带有全大写文本的行,然后转到下一行,p 标签中的内容捕获带有小写文本的行,然后转到下一行全大写文本。

所以我希望它得到所有这些:

<p>1. ALLCAPSTEXT1 - etc etc</p>
<p>01. lowercasetext1 - etc etc</p>
<p>02. lowercasetext1 - etc etc</p>

但它只捕获全大写文本之后的第一行,然后跳到全大写文本的下一行并执行相同的操作。

<p>1. ALLCAPSTEXT1 - etc etc</p>
<p>01. lowercasetext1 - etc etc</p>

然后转到:

<p>2. ALLCAPSTEXT2 - etc etc</p>
<p>01. lowercasetext2 - etc etc</p

关于如何让它捕获所有具有小写文本的行直到它到达具有全大写文本的下一行、冲洗并重复的任何提示?

【问题讨论】:

标签: regex sublimetext3 sublimetext


【解决方案1】:

这样可以吗

(?m)^.*?ALLCAPSTEXT.*(?:(?!^.*?ALLCAPSTEXT)[\S\s])*

https://regex101.com/r/TfDsL9/1

展开

 (?m)
 ^ .*? ALLCAPSTEXT .* 
 (?:
      (?! ^ .*? ALLCAPSTEXT )
      [\S\s] 
 )*

【讨论】:

    【解决方案2】:
    <p>\d+\.\s[A-Z]+.*<\/p>(\n+<p>\d+\.\s[a-z]+.*<\/p>)+
    

    【讨论】:

      猜你喜欢
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 2014-07-27
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多