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, который может извлечь значение ключа, где бы он ни находился в строке.
В дополнение к ответу Wiktor Stribiżew вы можете использовать якоря. $
обозначает конец строки.
tppid=\w+(?=;|\s|$)
Также это регулярное выражение извлекает для вас только значения без части tppid=
:
(?<=tppid=)\w+(?=;|\s|$)
Вы можете использовать отрицательный класс символов [^;]
для сопоставления с любым символом, но ;
:
tppid=([^;]+)
Посмотреть демо-версию регулярного выражения
Поскольку третий аргумент для regexp_extract
- 1
(доступ к содержимому группы 1), вы можете отказаться от конструкции lookbehind и использовать tppid=
как часть потребляющего шаблона.