Python 正则表达式匹配段落
Python Regex Match Paragraphs
我有一个如下所示的字符串:
...
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).
...
我正在尝试将字符串拆分为来自 Art 的部分。 XX到下一个艺术。 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。
首先,在模式中使用捕获组并将其传递给 re.findall
。接下来,您不应该尝试量化环视,这没有任何意义,而且通常被视为用户错误。 Python 中的 (?=Art)*
将被视为没有 (?=Art)*
,因为它表示 "there can be Art
or there can be no Art
"。就像没有前瞻一样。
您可以使用
result = re.findall(r'(?m)^Art\..*(?:\n(?!Art\.).*)*', text)
详情
(?m)^
- 行首
Art\.
- Art.
字符串
.*
- 该行的其余部分
(?:\n(?!Art\.).*)*
- 0 个或多个不以 Art.
开头的行
我有一个如下所示的字符串:
...
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).
...
我正在尝试将字符串拆分为来自 Art 的部分。 XX到下一个艺术。 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。
首先,在模式中使用捕获组并将其传递给 re.findall
(?=Art)*
将被视为没有 (?=Art)*
,因为它表示 "there can be Art
or there can be no Art
"。就像没有前瞻一样。
您可以使用
result = re.findall(r'(?m)^Art\..*(?:\n(?!Art\.).*)*', text)
详情
(?m)^
- 行首Art\.
-Art.
字符串.*
- 该行的其余部分(?:\n(?!Art\.).*)*
- 0 个或多个不以Art.
开头的行