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

使用正则表达式与Pandas提取店铺名称及位置

解决方案:提取店铺名称与位置信息

针对你的需求,我们可以通过正则表达式匹配字符串中的规律,精准提取店铺名称和位置信息,适配所有给出的示例格式。

实现代码

import pandas as pd
import re

# 示例数据
to_clean = ['ACTIVE BODY #1 - WEST VAN', 'BUY-LOW (80018) - KINGSGATE', 'CHOICES - CAMBIE #906',
     'CAUSEWAY MASSET - CAMBIE', 'COMMUNITY NATURAL S2 - CHINOOK', 'MEINHARDT - GRANVILLE (80068)',
     'WFM - CAMBIE - 10248']

def extract_store_location(s):
    # 提取店铺名称:匹配开头到分隔符'-',去除末尾的#数字、(数字)、S数字后缀
    store_match = re.match(r'^(.+?)\s*(?:#\d+|\(\d+\)|S\d+)?\s*-\s*', s)
    store = store_match.group(1).strip() if store_match else s
    
    # 提取位置信息:匹配分隔符'-'之后的内容,去除末尾的#数字、(数字)、-数字后缀
    location_match = re.search(r'-\s*(.+?)\s*(?:#\d+|\(\d+\)|\s*-\s*\d+)?$', s)
    location = location_match.group(1).strip() if location_match else ''
    
    return pd.Series([store, location])

# 生成结果DataFrame
data = pd.DataFrame({'to_clean': to_clean})
data[['store', 'location']] = data['to_clean'].apply(extract_store_location)

print(data)

正则逻辑说明

  • 店铺名称正则:^(.+?)\s*(?:#\d+|\(\d+\)|S\d+)?\s*-\s*

    • ^(.+?):非贪婪捕获开头到分隔符前的核心店铺名,避免包含后缀内容
    • (?:#\d+|\(\d+\)|S\d+)?:匹配并忽略末尾的#编号、括号内编号、S+编号这类后缀
    • \s*-\s*:匹配分隔符'-',兼容前后的空白字符
  • 位置信息正则:-\s*(.+?)\s*(?:#\d+|\(\d+\)|\s*-\s*\d+)?$

    • -\s*(.+?):捕获分隔符后的核心位置内容
    • (?:#\d+|\(\d+\)|\s*-\s*\d+)?:忽略末尾的#编号、括号内编号、末尾的'-+数字'后缀
    • $:确保匹配到字符串结尾,避免遗漏后缀

执行代码后,生成的data DataFrame将完全符合你给出的期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:35:23