I have a column in pyspark dataframe which contain values separated by ;
+----------------------------------------------------------------------------------+
|name |
+----------------------------------------------------------------------------------+
|tppid=dfc36cc18bba07ae2419a1501534aec6fdcc22e0dcefed4f58c48b0169f203f6;xmaslist=no|
+----------------------------------------------------------------------------------+
因此,如果我使用此列,则在此列中可以有任意数量的键值对
df.withColumn('test', regexp_extract(col('name'), '(?<=tppid=)(.*?);', 1)).show(1,False)
我可以提取tppid,但是当tppid不能连续提取时,它是行中的最后一个键值对,我想要一个regx,它可以提取键值在行中的位置。 / p>
答案 0 :(得分:1)
您可以使用否定的字符类[^;]
来匹配除;
以外的任何字符:
tppid=([^;]+)
请参见regex demo
由于regexp_extract
的第三个参数是1
(访问第1组的内容),因此您可以丢弃后向构造并使用tppid=
作为使用模式的一部分。
答案 1 :(得分:0)
除了WiktorStribiżew的答案外,您还可以使用锚点。 $
表示字符串的结尾。
tppid=\w+(?=;|\s|$)
this正则表达式也只为您提取不含tppid=
部分的值:
(?<=tppid=)\w+(?=;|\s|$)