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

如何修改pandas df列str.extract所用regex以正确提取地址地块信息

pandas提取地址中地块Lot编号的正则修正方案

问题场景

DataFrame的Addr列存储标准地址文本,需要提取地址开头标注的地块编号生成独立Lot列,样例数据如下:

df['Addr']
LT 75 CEDAR WOOD 3RD PL
LTS 22,25 & 26 MULLINS CORNER
LTS 7 & 8
PT LT 22-23 JEFFERSON HIGHLANDS EXTENSION

预期提取结果:

df['Lot']
75
22,25 & 26
7 & 8
22-23

初始使用的提取代码如下,运行后逗号、&连接的多地块编号只能抓到第一个数字段,结果不符合要求:

df['Lot'] = df['Addr'].str.extract(r'\b(?:LOT|LT|LTS?) (\w+(?:-\d+)*)')
# 实际输出
# 75
# 22
# 7
# 22-23

问题原因

初始正则的捕获组规则只覆盖了「纯数字」「数字-数字」两种单地块/连字符连接的连续地块格式,没有把逗号、&(含转义格式&)识别为地块编号的合法连接符,匹配到第一个数字后碰到逗号/&就直接终止,导致多地块内容截断。

修改方案

调整捕获组规则,将逗号、&、横杠都纳入编号连接符的匹配范围,匹配到第一个非编号相关的字符(也就是后续路名的首字母)时自动停止,修改后代码如下:

# 适配&转义为&的存储场景
df['Lot'] = df['Addr'].str.extract(r'\b(?:LOT|LT|LTS?) ((?:\d+[,&-]?\s*(?:&)?\s*)+)')

如果地址中存储的是原生&字符而非转义后的&,可以用更简洁的正则版本:

df['Lot'] = df['Addr'].str.extract(r'\b(?:LOT|LT|LTS?) ((?:\d+[,&-]?\s*&?\s*)+)')

运行上述代码后,样例数据的提取结果和预期完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:03:17