Как заменить строки в столбце, если они существуют в списке, с помощью dbt jinja?

Я новичок в написании sql с jinja в dbt. Я создал эту переменную, например:

{% set html_tags = [
    '<td>',
    '</td>',
    '&nbsp;',
    '<td style = "background-color: #d8d8d8;">',
    '<span style = "text-decoration: underline; font-family: arial; font-size: 16px;">',
    '<span style = "font-family: arial;">', 
    '</span>',  
    '<span style = "font-family: arial; font-size: 16px;">', 
    '<span class = "Apple-tab-span" style = "white-space: pre;">'
%}

У меня есть столбец с именем question, и строка содержит эти HTML-теги. Я хотел бы перебрать свой список и заменить эти теги в столбце question для каждой записи на '', чтобы очистить текст. Это возможно?

Пример строки из столбца question: <tdstyle = "background-color:#d8d8d8;">Hemoglobin</td><tdstyle = "background-color:#d8d8d8;">&nbsp;14.6g/dL&nbsp;</td>

Я бы хотел почистить его до Hemoglobin 14.6g/dL

Я думаю, мне нужен цикл for или макрос? Я понимаю, что это может быть не лучший подход для очистки этих html-тегов, но на данный момент это единственный доступный мне инструмент.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, наиболее простым является создание макроса, в котором вы определяете строки (теги HTML), от которых хотите избавиться, а затем применяете его к столбцам. Если эти теги не подлежат изменению, вы можете просто жестко закодировать их в макросе:

-- macros/cleanse_html_tags.sql

{% macro cleanse_html_tags(field_with_html_tags) %}

{% set html_tags = [
    '<td>',
    '</td>',
    '&nbsp;',
    '<td style = "background-color: #d8d8d8;">',
    '<span style = "text-decoration: underline; font-family: arial; font-size: 16px;">',
    '<span style = "font-family: arial;">',
    '</span>',
    '<span style = "font-family: arial; font-size: 16px;">',
    '<span class = "Apple-tab-span" style = "white-space: pre;">'
  ]
%}

regexp_replace({{ field_with_html_tags }}, '{{ html_tags|join('|') }}')

{% endmacro %}

Затем вам просто нужно будет вызвать макрос из вашей модели следующим образом, и все:

-- your_model.sql

select {{ cleanse_html_tags('my_html_string') }} as my_string_without_html_tags
from {{ ref('your_other_model') }}

Другие вопросы по теме