Находите в pyspark выражение regx?

1
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, который может извлечь значение ключа, где бы он ни находился в строке.

Теги:
pyspark
pyspark-sql

2 ответа

0

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

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

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

(?<=tppid=)\w+(?=;|\s|$)
  • 0
    Однако эти шаблоны не будут работать с текущим кодом OP.
0

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

tppid=([^;]+)

Посмотреть демо-версию регулярного выражения

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню