regexp_extract(str, pattern, idx)
Описание
Функция regexp_extract()
извлекает подстроку, соответствующую регулярному выражению pattern
, из строки str
. Параметр idx
указывает, какую группу захвата извлечь (0 - вся строка, 1 - первая группа и т.д.).
Параметры
str
: string или Column - строка для поискаpattern
: string - регулярное выражениеidx
: integer - индекс группы захвата (0 - вся строка, 1 - первая группа и т.д.)
Возвращаемое значение
String - извлеченная подстрока или пустая строка, если совпадение не найдено
Пример использования
from pyspark.sql.functions import regexp_extract
# Создаем DataFrame
df = spark.createDataFrame([
("John Doe (25)",),
("Jane Smith (30)",),
("Bob Builder (35)",),
("Invalid Name",),
(None,)
], ["text"])
# Извлекаем различные части строки
df.select(
"text",
regexp_extract("text", r"(\w+) (\w+)", 0).alias("full_name"), # Вся строка
regexp_extract("text", r"(\w+) (\w+)", 1).alias("first_name"), # Первая группа
regexp_extract("text", r"(\w+) (\w+)", 2).alias("last_name"), # Вторая группа
regexp_extract("text", r"\((\d+)\)", 1).alias("age") # Возраст
).show(truncate=False)
# Результат:
# +---------------+----------+----------+---------+----+
# |text |full_name |first_name|last_name|age |
# +---------------+----------+----------+---------+----+
# |John Doe (25) |John Doe |John |Doe |25 |
# |Jane Smith (30)|Jane Smith|Jane |Smith |30 |
# |Bob Builder (35)|Bob Builder|Bob |Builder |35 |
# |Invalid Name | | | | |
# |null |null |null |null |null|
# +---------------+----------+----------+---------+----+
# Пример с email адресами
df = spark.createDataFrame([
("user@example.com",),
("admin@company.org",),
("invalid.email",),
(None,)
], ["email"])
df.select(
"email",
regexp_extract("email", r"([^@]+)@(.+)", 1).alias("username"),
regexp_extract("email", r"([^@]+)@(.+)", 2).alias("domain")
).show()
Примечания
- Регулярные выражения должны быть в формате Java
- Индекс 0 возвращает всю совпадающую строку
- Если совпадение не найдено, возвращается пустая строка
- Для NULL значений возвращается NULL
- Функция полезна для извлечения структурированных данных из текста
- Для замены по регулярному выражению используйте
regexp_replace()
- Для проверки соответствия регулярному выражению используйте
rlike()