Python正则表达式匹配段落

2024-06-16 17:12:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,看起来像这样:

...

Art. 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 Absatz 1 StGB und die Sicherstellung der Sorgfalt bei Finanzgeschäften.

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

...

我正试着把这根线从艺术上分成几部分。XX到下一个艺术。二十。你知道吗

例如,第一个匹配项应该包含以下字符串:

Art. 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 Absatz 1 StGB und die Sicherstellung der Sorgfalt bei Finanzgeschäften.

我试过这个:

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

还有这个:

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

但它似乎并不像预期的那样起作用。。。 我也不确定我应该使用findall还是split。你知道吗


Tags: reimartderdievonundfindall
1条回答
网友
1楼 · 发布于 2024-06-16 17:12:50

首先,在模式中使用捕获组并将其传递给re.findallonly the captures will be present in the output时。下一步,你不应该试图量化一个lookaround,它没有任何意义,通常被视为一个用户错误。(?=Art)*在Python中这里将被视为没有(?=Art)*,因为它意味着“可以有Art或者没有Art”。就像没有展望一样。你知道吗

你可以用

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

参见regex demo

细节

  • (?m)^-行首
  • Art\.-Art.字符串
  • .*-行的其余部分
  • (?:\n(?!Art\.).*)*-0行或多行不以Art.开头

相关问题 更多 >