РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ для поиска и удаления всех символов вплоть до последнего дефиса включительно

#sql #regex

#sql #регулярное выражение

Вопрос:

Я ищу способ поиска и удаления всего, вплоть до — из приведенных ниже строк. Я пробовал варианты, и ни один из них не работает именно так, как я хочу. Я пытался regex_replace , но это не уловило их все, и я обнаружил, что создаю отдельные операторы regexp для каждого сценария, что, похоже, ничуть не лучше, чем жесткое кодирование. Я надеюсь, что у кого-то есть решение. Я был бы очень признателен за это.

 POLY GON - HOME
POLY-GON-HOME
POLY - GON - HOME
POLY - GON HOME
PG - HOME
PG-HOME
  

Я хочу показать все после второго дефиса. Итак, HOME это то, что я хочу отобразить.
Я пытался

 regexp_replace(string,A[^-] -[^-] )
  

но оно удаляет все, кроме второго дефиса. В противном случае это работает.

Комментарии:

1. Покажите, что вы пробовали. Мы поможем вам это исправить, мы не будем писать это за вас.

2. можете ли вы показать, какими должны быть желаемые результаты?

3. Я обновил свой вопрос, чтобы показать, что я хочу отобразить в своем результате, а также то, что я пробовал.

4. Какую СУБД вы используете? SQL-Сервер, Oracle, MySQL?

5. regexp_replace(string, '^.*-', '')

Ответ №1:

Используйте

 SELECT regexp_replace(string, '^.*-', '')
  
  • ^ соответствует началу строки.
  • .* соответствует любой строке
  • - соответствует дефису

Поскольку * является жадным, это сопоставит все до последнего дефиса. Затем оно заменяется пустой строкой.

Ответ №2:

Я думаю что-то вроде:

 select regexp_substr(string, '[^-] $')
  

Это в основном сохраняет последнюю строку символов, которые не являются дефисами.

Не все базы данных, поддерживающие регулярные выражения, поддерживают regexp_substr() , но у них есть некоторая похожая функция.