簡體   English   中英

Python 正則表達式匹配段落

[英]Python Regex Match Paragraphs

我有一個看起來像這樣的字符串:

...

藝術。 15 Gegenstand Dieses Gesetz regelt die Bekämpfung der Geldwäscherei im Sinne von Artikel 305 bis des Strafgesetzbuches6 (StGB), die Bekämpfung der Terrorismusfinanzierung im Sinne von Artikel 260quinquies Stafgesetzbuches6 (StGB)

藝術。 22 Geltungsbereich 1 Dieses Gesetz gilt: für Finanzintermediäre; für natürliche und juristische Personen, die gewerblich mit Gütern handeln und dabei Bargeld entgegennehmen (Händlerinnen und Händler)。

...

我正在嘗試將 String 拆分為 Art 中的部分。 XX 到下一個藝術。 XX。

因此,例如,第一個 Match 應包含字符串:

藝術。 15 Gegenstand Dieses Gesetz regelt die Bekämpfung der Geldwäscherei im Sinne von Artikel 305 bis des Strafgesetzbuches6 (StGB), die Bekämpfung der Terrorismusfinanzierung im Sinne von Artikel 260quinquies Stafgesetzbuches6 (StGB)

我試過這個:

x = re.findall(r"Art\. (?s).*(?=Art)",text);

和這個:

x = re.findall(r"Art\. .+(\n.*)*(?=Art)*",text);

但它似乎沒有按預期工作......而且我不確定我應該使用 findall 還是 split。

首先,當在模式中使用捕獲組並將其傳遞給re.findall時,輸出中只會出現捕獲 接下來,您不應該嘗試量化環視,它沒有任何意義並且通常被視為用戶錯誤。 (?=Art)*在 Python 中將被視為沒有(?=Art)* ,因為這意味着“可以有Art ,也可以沒有Art ”。 就像沒有前瞻一樣。

您可以使用

result = re.findall(r'(?m)^Art\..*(?:\n(?!Art\.).*)*', text)

查看正則表達式演示

細節

  • (?m)^ - 一行的開始
  • Art\\. - Art. 細繩
  • .* - 該行的其余部分
  • (?:\\n(?!Art\\.).*)* - 0 或更多行不以Art.開頭Art.

暫無
暫無

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

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