Skip to content

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()