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

PySpark regexp_extract不识别=符号?URL正则匹配问题求助

解决PySpark中正则匹配URL的问题

问题背景

需要编写正则表达式匹配满足以下条件的URL:

  • 包含text.csv
  • 后跟单个字母参数(如c=)
  • 参数值为10-25位的字母或数字

在Pandas中使用正则text.csv\?[a-z]+=[a-zA-Z0-9]{10,25}$可以正常匹配,但在PySpark 3.3.1中无效,当前执行结果所有匹配结果均为false,期望仅符合条件的URL返回True。

问题原因

  1. 字符串转义错误:原代码中使用原始字符串定义正则r'text.csv\\?[a-z]+=[a-zA-Z0-9]{10,25}$',再通过f-string嵌入expr时,额外的转义导致?被错误处理,无法匹配URL中的?符号。
  2. 函数选择不当:使用regexp_extract结合空字符串判断不如直接使用regexp_like函数高效,后者专门用于判断字符串是否匹配正则。

解决方法

方案1:修正正则转义并使用regexp_like

直接使用regexp_like函数,传递正确的正则表达式(PySpark基于Java正则引擎,?作为特殊字符只需一次转义):

from pyspark.sql import functions, types

data2 = [("http://daasd.com/text.csv?c=uss1zhv1imikb4w", 2),
         ("http://oasnd.com/car.csv?c=913fh7n83n19ms98", 4),
         ("http://dunfdas.com/bread.csv?c=4968698835", 8),
         ("http://dasuugfb.com/meat.csv?c=0uhkmr9dvs3hs", 7),
         ("http://daosj.com/text.csv?c=h7hgk1r3o3", 1),
         ("http://daosj.com/text.csv?c=h7hg", 1),
]

schema = types.StructType([
    types.StructField("url", types.StringType(), True),
    types.StructField("val", types.IntegerType(), True),
])

df = spark.createDataFrame(data=data2, schema=schema)

# 使用正确的正则和regexp_like函数
df = df.withColumn('is_match', functions.regexp_like('url', r'text.csv\?[a-z]+=[a-zA-Z0-9]{10,25}$'))

df.show(truncate=False)

方案2:修正expr中的正则转义

如果坚持使用expr,需确保正则的转义正确,避免双重转义:

# 正则只需一次转义?,不需要额外的反斜杠
my_regex = r'text.csv\?[a-z]+=[a-zA-Z0-9]{10,25}$'
# 直接用regexp_like更简洁
df = df.withColumn('is_match', functions.expr(f"regexp_like(url, '{my_regex}')"))

执行结果

运行修正后的代码后,将得到期望的结果:

+--------------------------------------------+---+--------+
|url                                         |val|is_match|
+--------------------------------------------+---+--------+
|http://daasd.com/text.csv?c=uss1zhv1imikb4w |2  |true    |
|http://oasnd.com/car.csv?c=913fh7n83n19ms98 |4  |false   |
|http://dunfdas.com/bread.csv?c=4968698835   |8  |false   |
|http://dasuugfb.com/meat.csv?c=0uhkmr9dvs3hs|7  |false   |
|http://daosj.com/text.csv?c=h7hgk1r3o3      |1  |true    |
|http://daosj.com/text.csv?c=h7hg            |1  |false   |
+--------------------------------------------+---+--------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:02:44