使用正则表达式与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
相关产品推荐
相关产品推荐

