繁体   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