在pyspark中找到正则表达式?

时间:2019-01-10 12:13:17

标签: python regex pyspark pyspark-sql

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>

2 个答案:

答案 0 :(得分:1)

您可以使用否定的字符类[^;]来匹配除;以外的任何字符:

tppid=([^;]+)

请参见regex demo

由于regexp_extract的第三个参数是1(访问第1组的内容),因此您可以丢弃后向构造并使用tppid=作为使用模式的一部分。

答案 1 :(得分:0)

除了WiktorStribiżew的答案外,您还可以使用锚点。 $表示字符串的结尾。

tppid=\w+(?=;|\s|$) 

this正则表达式也只为您提取不含tppid=部分的值:

(?<=tppid=)\w+(?=;|\s|$)