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

如何使用Spark regexp_extract按规则截取清洗后的邮政地址

地址截断解决方案:Spark正则修正

问题分析

你原来的正则表达式存在核心逻辑错误:字符组[^(0-9| appartement | escalier )]会将括号、竖线、空格都当作普通字符处理,无法正确识别需要截断的触发关键词或数字,导致匹配逻辑完全偏离需求。

正确正则实现(结合非捕获组与正向预查)

我们使用正向预查定位截断位置,非捕获组统一管理触发关键词,同时处理无触发词时返回原地址的情况:

正则表达式:

^.*?(?=\s+(?:\d|appartement|escalier)\b)|^.*$
  • ^.*?:非贪婪匹配从开头到触发条件前的所有内容
  • (?=\s+(?:\d|appartement|escalier)\b):正向预查,匹配"空格+数字/appartement/escalier+单词边界"的位置,用(?:)创建非捕获组减少不必要的分组
  • |^.*$:备选分支,当无触发条件时匹配整个地址

修改后的Spark代码

my_df.select("adresse_rue").withColumn(
    "adresse_rue", 
    f.regexp_extract(
        "adresse_rue",
        r'^.*?(?=\s+(?:\d|appartement|escalier)\b)|^.*$',
        0  # 提取整个匹配分支的内容
    )
).take(20)

示例验证

  • 输入:"1 rue de l'église" → 无触发词,返回原地址:"1 rue de l'église"
  • 输入:"2 rue de la poste appartement B" → 匹配到appartement前的内容,返回:"2 rue de la poste"
  • 输入:"3 4 rue de la mairie 2eme étage" → 匹配到数字2前的内容,返回:"3 4 rue de la mairie"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:18:36