簡體   English   中英

正則表達式:匹配特定模式之間的任何內容

[英]regular expression: match anything between specific pattern

我試圖提出一個與特定模式匹配的正則表達式,通過該正則表達式可以排列文本文件中的文章。 (注意:“ |”表示段落標記/換行符,而“。”表示一些非單詞字符。)這是模式

| 
...........................Dokument.1.von.55|
| 
|
|
..........................Some newspaper| 
| 
..........................Freitag 08. Mai 2015 
|
sometextsometextsometextsometextsometextsometextsometextsometextsometextsometext
sometextsometextsometextsometextsometextsometextsometextsometextsometextsometext
(etc..)
|
METAINFO1: IWOIOWIEOWEIWOEIWEO
| 
(etc... possibly more metainfo all capitalized) 
|
| 
.........................Copyright 2015 some publisher notes 
.........................at most one more single line containing copyright information
.........................Alle Rechte vorbehalten| 
# note: last line alternatively: All Rights Reserved 


|
(next pattern i.e. article) 

(出於版權目的,我不得不將其匿名化)

我創建了以下正則表達式來提取單個文章:

  1. 匹配行首,后跟換行符^[\\r\\n]
  2. 匹配包含“ Dokument ....”的行,其后跟非單詞字符[\\W]+Dokument \\d{1,} von \\d{1,}
  3. 匹配任意數量的換行符[\\r\\n]+
  4. 匹配任何單詞和非單詞字符(即文章的文本) [\\w\\W]+
  5. 匹配最后一個換行符(下一個模式開始之前的最后一行) [r\\n]
  6. 匹配任何非單詞字符和字符串“ Alle Rechte vorbehalten”或“保留所有權利” [\\W]+(Alle Rechte vorbehalten|All Rights Reserved)
  7. 匹配行尾(最后一行) $

因此,整個RE為^[\\r\\n][\\W]+Dokument \\d{1,} von \\d{1,}[\\r\\n]+[\\w\\W]+[\\r\\n][\\W]+(Alle Rechte vorbehalten|All Rights Reserved)$

我已經用Textpad測試過了。 當我使用RE進行向后搜索時,它會匹配任何單個文章(根據需要)。 但是,當我進行正向搜索時,它會匹配整個文檔。

起初,我認為它與任何文章都匹配,然后看起來好像是否與所有內容都匹配。 但是后來我嘗試了replace選項,結果是我的測試術語只被替換了一次。

因此,可再生能源不履行職責。 我已經為此工作了一段時間,但找不到我的錯誤。

我做錯了什么? -我的RE有錯誤嗎?

我打算匹配文章,將工作中的RE變成一個捕獲組,然后將其替換為一些xml。 但是我被困在這里。

干杯,安德魯

訣竅是使與文章正文匹配的部分不貪心 ,並為文章明確定義開始和結束匹配。

re.compile(r'^\n\W+Dokument.+?\n\W+Copyright[^\n]+\n(?:[^\n]+\n)?', flags=re.S)

僅重申一下假設:

  • 以換行符開頭,然后是包含非單詞字符的行,然后是“ Dokument”
  • 包含一個充滿任何字符的正文。
  • 以換行符結尾,然后是非單詞字符行,其后是“版權”,然后是更多字符和換行符。
  • 可以選擇包含多行字符,后跟換行符。

暫無
暫無

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

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