You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python re.findall正确匹配模式咨询:提取以Bebauungsplan开头以“结尾的字符串

问题描述

现有如下待处理德语文本:

Aufstellung des Bebauungsplanes KLM-BP-025-2 „Neue Hakeburg“, hier: Änderung des Aufstellungsbeschlusses vom
13.12.2012 (DS-Nr. 164/12) – DS-Nr. 007/16/2 Der Beschluss DS-Nr. 164/12 vom 13.12.2012 zur Aufstellung des Bebauungsplanes KLM-BP-025-2 „Neue Hakeburg“ wird ge- ändert. Der Bürgermeister wird beaufragt, für den in Anlage 1 abgegrenzten Geltungsbereich einen Bebauungsplan-Entwurf erarbeiten zu lassen, mit dem die folgenden Punkte umgesetzt werden: 1) Die zulässige Nutzungsart soll von „Sondergebiet 3 Hotel“ geändert werden

需求是从上述文本中提取所有以Bebauungsplan开头、以左双引号„结尾的字符串,目前编写的实现代码如下:

import re
temps = re.findall(r'Bebauungsplan[\S\n ]+“', text, re.MULTILINE)

请问符合需求的re.findall正确匹配模式是什么?


解决方案

你当前使用的正则存在贪婪匹配过度的问题:+是贪婪量词,会尽可能匹配最长的内容,最终只会返回从第一个Bebauungsplan到全文最后一个左双引号的超长错误结果,无法拆分出多个符合要求的片段,且re.MULTILINE标志只控制^和$的匹配规则,对你的需求没有作用。

推荐使用如下两种正确的匹配模式:

方案1:排除法匹配(效率更高,无需额外标志位)

直接匹配Bebauungsplan之后所有不等于左双引号的字符,直到碰到第一个左双引号就停止:

import re
temps = re.findall(r'Bebauungsplan[^„]+„', text)

[^„]默认包含换行符、空格等所有除了目标左双引号之外的字符,完全适配你的文本场景。

方案2:非贪婪匹配(写法更直观)

搭配re.DOTALL标志让.可以匹配换行符,用.*?非贪婪匹配到第一个左双引号就停止:

import re
temps = re.findall(r'Bebauungsplan.*?„', text, re.DOTALL)

匹配结果

两种方案都能从示例文本中提取到2个符合要求的结果:

  • Bebauungsplanes KLM-BP-025-2 „
  • Bebauungsplanes KLM-BP-025-2 „

内容的提问来源于stack exchange,提问作者Benni L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:39:02