簡體   English   中英

如何在正則表達式中選擇多行?

[英]How do I select multiple lines in a regular expression?

我有一些遵循這種模式的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

關於如何獲取所有具有小寫字母的行的提示,直到到達全大寫文本的下一行,然后沖洗並重復?

可以這樣

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

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

展開式

 (?m)
 ^ .*? ALLCAPSTEXT .* 
 (?:
      (?! ^ .*? ALLCAPSTEXT )
      [\S\s] 
 )*
<p>\d+\.\s[A-Z]+.*<\/p>(\n+<p>\d+\.\s[a-z]+.*<\/p>)+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM