PySpark正则表达式获取字符串和连字符之间的值

uujelgoq  于 4个月前  发布在  Spark
关注(0)|答案(1)|浏览(57)

我正在尝试提取字符串“line_number:“和连字符之间的数字。我正在为在PySpark中生成相同的正则表达式/子字符串而挣扎。下面是我在一个名为“whole_text”的列中的输入数据。字符串“line_number:“将总是在每行中后跟数字和连字符。有没有办法可以找到文本“line_number:“和其后的第一个连字符,并提取其间的数字?
新列中的输出应为121、3112等。
请帮帮我

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

字符串

qnyhuwrf

qnyhuwrf1#

一些最小的示例代码将有助于复制您的问题。
下面是我解决这个问题的方法:

from pyspark.sql import SparkSession
import pyspark.sql.functions as F

spark = SparkSession.builder.getOrCreate()

df = spark.createDataFrame([("""
text:ABC12637-XYZ  line_number:121-ABC:JJ11
header:3AXYZ166-LMN  line_number:3112-GHI:3A1
""",)], ['str'])

df.select("str", F.expr(r"regexp_extract_all(str, r'line_number:(\d+)-', 1)").alias('extracted')).show()

字符串
它产生:

+--------------------+-----------+
|                 str|  extracted|
+--------------------+-----------+
|\ntext:ABC12637-X...|[121, 3112]|
+--------------------+-----------+


更新:

df.withColumn('extracted_regex', F.expr(r"regexp_extract_all(str, r'line_number:(\d+)-', 1)")).show()
+--------------------+---------------+
|                 str|extracted_regex|
+--------------------+---------------+
|\ntext:ABC12637-X...|    [121, 3112]|
+--------------------+---------------+


使用Python 3.12和Spark 3.5

>>> spark.version
'3.5.0'

相关问题