Пишу макрос в dbt с SQL для очистки имён. Я изящно хотел поставить первую букву имени выше, но мой
regexp_replace('(\w)(\w*)', x -> upper(x[1]) || lower(x[2])
сталкивается с немецкими умляутами ä, ö, ü
Так, например, фамилия schöneberger с моим выражением регулярного выражения сверху становится SchöNeberger, а не Schöneberger.
Кто-нибудь знает, что написать, чтобы я мог использовать умлауты и для Шёнебергера, и для других имен?
Да, это связано с SQL. Я использую дбт.
jarlh спрашивал, что это за база данных? То, что вы поделились, очень странный синтаксис для regexp_replace()
Данные хранятся в AWS Athena.
Вам нужно будет настроить регулярное выражение, чтобы добавить юникод для умлаутов. Вот такой вопрос, надеюсь, он поможет: stackoverflow.com/questions/22017723/regex-for-umlaut
Athena использует синтаксис Trino, который использует синтаксис регулярных выражений Java. Java поддерживает расширенные классы символов, использующие свойства Unicode из Perl, включая \p{L}
, который по сути представляет собой «любую букву Unicode». Итак, это будет работать для вас:
regexp_replace(name_col, '(\p{L})(\p{L}*)', x -> upper(x[1]) || lower(x[2]))
Доказательство: https://regex101.com/r/N84wjS/2
Это вопрос, связанный с языком SQL? Какие СУБД вы используете?