regexp_replace(str, pattern, replacement)
Описание
Функция regexp_replace()
заменяет все подстроки в строке str
, соответствующие регулярному выражению pattern
, на строку replacement
. Если совпадений не найдено, возвращается исходная строка.
Параметры
str
: string или Column - строка для поиска и заменыpattern
: string - регулярное выражение для поискаreplacement
: string - строка для замены найденных подстрок
Возвращаемое значение
String - строка с выполненными заменами
Пример использования
from pyspark.sql.functions import regexp_replace
# Создаем DataFrame
df = spark.createDataFrame([
("Hello, World!",),
("123-456-7890",),
("user@example.com",),
("No changes here",),
(None,)
], ["text"])
# Заменяем различные паттерны
df.select(
"text",
regexp_replace("text", r"[,\s!]", "").alias("no_punctuation"), # Удаляем знаки препинания
regexp_replace("text", r"\d", "#").alias("masked_numbers"), # Маскируем цифры
regexp_replace("text", r"@.*", "@***").alias("masked_email"), # Маскируем домен email
regexp_replace("text", r"(\d{3})-(\d{3})-(\d{4})", "($1) $2-$3").alias("formatted_phone") # Форматируем телефон
).show(truncate=False)
# Результат:
# +---------------+--------------+--------------+-------------+---------------+
# |text |no_punctuation|masked_numbers|masked_email |formatted_phone|
# +---------------+--------------+--------------+-------------+---------------+
# |Hello, World! |HelloWorld |Hello, World! |Hello, World!|Hello, World! |
# |123-456-7890 |123-456-7890 |###-###-#### |123-456-7890 |(123) 456-7890 |
# |user@example.com|user@example.com|user@example.com|user@*** |user@example.com|
# |No changes here|No changes here|No changes here|No changes here|No changes here|
# |null |null |null |null |null |
# +---------------+--------------+--------------+-------------+---------------+
# Пример с очисткой текста
df = spark.createDataFrame([
("Price: $99.99",),
("Discount: 25%",),
("Special offer!",),
(None,)
], ["description"])
df.select(
"description",
regexp_replace("description", r"[^\w\s]", "").alias("clean_text"), # Удаляем все кроме букв, цифр и пробелов
regexp_replace("description", r"\d+", "X").alias("masked_numbers") # Заменяем числа на X
).show()
Примечания
- Регулярные выражения должны быть в формате Java
- Замена выполняется для всех совпадений в строке
- Если совпадений не найдено, возвращается исходная строка
- Для NULL значений возвращается NULL
- Функция полезна для очистки и форматирования текста
- Для извлечения подстрок по регулярному выражению используйте
regexp_extract()
- Для проверки соответствия регулярному выражению используйте
rlike()
- В строке замены можно использовать группы захвата с помощью $1, $2 и т.д.