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

PySpark正则提取:获取line_number:与连字符间的数字

PySpark提取指定数字的实现方法

要从whole_text列中提取line_number:之后、第一个连字符-之前的数字,最可靠的方式是使用正则表达式提取,以下是具体实现:

方法一:正则表达式提取(推荐)

使用PySpark的regexp_extract函数,通过正则精准匹配目标数字:

  • 正则规则:r'line_number:(\d+)-',其中(\d+)专门捕获line_number:后到第一个-之间的所有数字
  • 第三个参数1表示提取正则中第一个捕获组的内容

示例代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import regexp_extract

# 初始化SparkSession
spark = SparkSession.builder.appName("ExtractLineNumber").getOrCreate()

# 创建示例数据
data = [
    ("text:ABC12637-XYZ  line_number:121-ABC:JJ11",),
    ("header:3AXYZ166-LMN  line_number:3112-GHI:3A1",)
]
df = spark.createDataFrame(data, ["whole_text"])

# 添加提取结果列
df = df.withColumn("line_num", regexp_extract("whole_text", r'line_number:(\d+)-', 1))

# 查看结果
df.show(truncate=False)

输出结果

+---------------------------------------------+--------+
|whole_text                                   |line_num|
+---------------------------------------------+--------+
|text:ABC12637-XYZ  line_number:121-ABC:JJ11  |121     |
|header:3AXYZ166-LMN  line_number:3112-GHI:3A1|3112    |
+---------------------------------------------+--------+

方法二:子串截取(适用于固定格式场景)

如果line_number:在文本中的位置相对固定,也可以通过instr和substring组合实现,但灵活性不如正则:

from pyspark.sql.functions import instr, substring

df = df.withColumn(
    "line_num",
    substring(
        "whole_text",
        instr("whole_text", "line_number:") + len("line_number:"),
        instr("whole_text", "-", instr("whole_text", "line_number:")) - (instr("whole_text", "line_number:") + len("line_number:"))
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:15:55