使用正则表达式在 pyspark 中提取字符串中的模式

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

我有一个名为

rasm_4_Becv0_0_1234_rasm_3exm
的字符串 我想提取
Becv
之后的数字,即 pysaprk 中的
0_0_1234

任何人都可以建议这个模式的正则表达式是什么吗? 数字正在变化。

regex pyspark
2个回答
1
投票

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


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))

此模式与美元符号作为组提取器一样有效。所以 $1 表示组 1,$2 表示组 2,依此类推。

# extract the pattern
regex = r".*(\d_\d_\d{4}).*"
replacement = "$1"
df_new = df.withColumn("extracted_string", f.regexp_replace(f.col("strings"), regex, repl))

1
投票

此模式将包括 Becv 和 _rasm 之间的任何内容

Becv(.*)_rasm

使用 https://regex101.com/ 自行尝试 ;)

© www.soinside.com 2019 - 2024. All rights reserved.