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

需求:使用正则表达式提取符合特定规则的建筑名称

提取符合规则的建筑名称正则表达式方案

需求说明

需从文本列表中提取建筑名称,规则如下:

  • 建筑名称始终全大写,前缀为Building:
  • 前缀后紧跟以下任意内容时,提取前缀后的全大写建筑名称:
    • (a) 数字;(b) 全大写的UNIT单词;(c) 任意大小写混合单词
  • 非Building:开头的行返回空值

现有正则问题

当前使用的正则^.*Building:\s([A-Z+\s*]*).*存在两个核心问题:

  1. 贪婪匹配导致将后续的全大写UNIT也包含进结果(第三个示例)
  2. 仅匹配大写字母和空格,遇到小写字母时提前终止匹配(第四个示例只提取到BUILDING ONE F)

修正后的正则表达式

.*Building:\s+([A-Z\s]+?)(?=\s+(?:\d|UNIT|[A-Za-z]+))

正则解析

  • .*Building:\s+:匹配任意前置文本,精准定位到Building:及后续的一个或多个空格
  • ([A-Z\s]+?):非贪婪匹配全大写字母与空格组合,确保只提取目标建筑名称
  • (?=\s+(?:\d|UNIT|[A-Za-z]+)):正向预查,用于终止匹配的条件——当后续出现空格+数字/全大写UNIT/任意大小写混合单词时,停止提取

验证结果

将正则应用到示例文本,提取结果如下:

  1. Building: BUILDING ONE 15 [...] → BUILDING ONE
  2. Optional preceding text Building: BUILDING ONE 15 [...] → BUILDING ONE
  3. Building: BUILDING ONE UNIT 15 [...] → BUILDING ONE
  4. Building: BUILDING ONE Floor 2 [...] → BUILDING ONE
  5. Grounds: OPEN SPACE WEST Section 3 [...] → 无匹配(返回空值)

Python使用提示

在Python的re模块中,可通过re.search()方法匹配,提取group(1)的值;若未匹配到结果,则返回空:

import re

pattern = r'.*Building:\s+([A-Z\s]+?)(?=\s+(?:\d|UNIT|[A-Za-z]+))'
text = "Your target text here"
match = re.search(pattern, text)
result = match.group(1).strip() if match else ""

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:54:59