Oracle Regex_replace, чтобы удалить шаблон и следующие 3 символа - PullRequest
2 голосов
/ 03 марта 2020

Я пытаюсь сделать следующую операцию. У меня есть много строк данных, которые необходимо отредактировать, чтобы удалить часть строки. Эта строка содержит шаблон B0ExxB +, где 'x' может быть любым символом или числом.

  • Пример ввода (строка): '1SX8+B0DSUB+B0E0LB+B0FMAB+B0G0KB'
  • Желаемый вывод: '1SX8+B0DSUB+B0FMAB+B0G0KB'

Я использую операцию REGEXP_REPLACE . есть две стратегии для выполнения sh операции:

  1. Известный шаблон B0E применяет больше операторов регулярных выражений, чтобы выбрать также 4 следующих символа после шаблона, а затем заменить их ничем.

    • Основная идея.

    update rx3qtxin xn set cin.cin_value = REGEXP_REPLACE (cin.cin_value, '\SB0E', '') where cin.id = 500228;

Удаляет шаблон, ОК. Я пробовал с добавлением как много? после шаблона, но он удаляет любую другую часть строки.

Известный левый шаблон ( B0E ) и правый шаблон ( B + ) удаляют, когда оба шаблона соответствуют друг другу и содержимое между ними.
  • Не знаю, как применить эту идею в регулярных выражениях. *

1 Ответ

4 голосов
/ 03 марта 2020

Знак вопроса является заполнителем для одного символа в Unix («подстановочный знак»). В регулярных выражениях для той же задачи мы используем точку (точка). Знак вопроса (в регулярном выражении) просто делает подвыражение, к которому он применяется, необязательным. Это не поможет вам в вашей задаче.

Вам нужно что-то вроде

regexp_replace(col, 'B0E..B\+') 

Обратите внимание, что знак "плюс" должен быть экранирован, поскольку не экранированный - это метасимвол.

...