2015-06-05 79 views
0

我想要拿出一個正則表達式來匹配一個特定的模式,通過這個模式我已經安排了文本文件中的文章。 (注:「|」表示段落標記/線斷裂,而顯示一些非單詞字符「」)這是模式正則表達式:匹配特定模式之間的任何東西

| 
...........................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. 匹配含有「庫門行.... 「通過非單詞字符之前[\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進行向後搜索時,它會匹配任何單個文章(根據需要)。但是當我做一個向前搜索它匹配整個文檔。

起初我認爲它匹配任何文章,然後看起來像是它匹配的一切。但後來我嘗試了替換選項,其結果是我的測試條款只被替換一次。

所以RE沒有完成它的工作。我一直在研究這一段時間,但無法找到我的錯誤。

我該怎麼做? - 我的RE中有錯誤嗎?

我打算匹配的文章,把工作RE成爲一個捕獲組,然後用一些XML替換它。但我被困在這裏。

乾杯, 安德魯

+0

如何將文本與「Dokument.1.von.55」模式「分割」? Dokument \ d {1,} von \ d {1,} [\ d \ D] *?(?= Dokument \ d {1,} von \ d {1,}) 那樣,必須正確匹配版權 – mameluc

回答

1

訣竅是要做出文章非貪婪的身體相匹配的部分,並具有非常明確的起點和終點的文章相匹配。

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

只是再次重申的假設:

  • 開始以新行,然後用非單詞字符的行,後跟「庫門」
  • 包含一個身上滿是任何字符。
  • 以換行符結束,後面跟着非單詞字符的行,後面跟着「版權」,後面跟着更多字符和換行符。
  • 可以選擇性地包含一行字符,後跟一個換行符。
+0

它實際上以2個換行符結尾,後面跟着一個非單詞字符的行,接着是更多字符和一個換行符的「版權」。除版權行外,它可以包含1,最多2行,以包含某些字符的非單詞字符開始。在版權行以及該行所附的行中都有可能出現的空格字符。你最後的要點實際上是否覆蓋了1,我剛纔提到的最多兩行? –

相關問題