Находите в pyspark выражение regx? - PullRequest
0 голосов
/ 10 января 2019
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, который может извлечь значение ключа, где бы он ни находился в строке.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

в дополнение к ответу Wiktor Stribiżew вы можете использовать якоря. $ обозначает конец строки.

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

Также это регулярное выражение для вас только значения без tppid= части:

(?<=tppid=)\w+(?=;|\s|$)
0 голосов
/ 10 января 2019

Вы можете использовать отрицательный класс символов [^;] для сопоставления с любым символом, но ;:

tppid=([^;]+)

См. Демоверсию regex

Поскольку третий аргумент regexp_extract - это 1 (доступ к содержимому группы 1), вы можете отказаться от конструкции lookbehind и использовать tppid= как часть потребляющего шаблона.

...