在 pyspark 中提取字符串中的模式

问题描述 投票:0回答:1

我有一个名为“rasm_4_Becv0_0_1234_rasm_3exm”的字符串 我想提取 pysaprk 中 Becv 之后的数字 0_0_1234。

我是使用正则表达式的新手。任何人都可以建议这个模式的正则表达式是什么。 数字在变化

提前致谢

regex pyspark
1个回答
0
投票

此代码应该能够提取您正在寻找的模式。 我以以下形式添加了一些虚拟数据:


strings
-------------------------------
rasm_4_Becv0_0_1230_rasm_3exm
rasm_4_Becv0_0_1231_rasm_3exm
rasm_4_Becv0_0_1232_rasm_3exm
rasm_4_Becv0_0_1233_rasm_3exm
rasm_4_Becv0_0_123{i}_rasm_3exm

from pyspark.sql import Row
from pyspark.sql.types import StructType, StringType, StructField
from pyspark.sql import functions as f

# build the DataFrame
data = []
for i in range(5):
    data.append(f"rasm_4_Becv0_0_123{i}_rasm_3exm")
df = spark.createDataFrame(data=[Row(x) for x in data], schema=StructType([StructField("strings", StringType(), True)]))

# extract the pattern
regex = r"(\d_\d_\d{4})"
group_idx = 1
df_new = df.withColumn("extracted_string", f.regexp_extract(f.col("strings"), regex, group_idx))
© www.soinside.com 2019 - 2024. All rights reserved.