Как мне удалить ненужные символы из результатов регулярных выражений?

#python #regex

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

Вопрос:

У меня есть входные данные в виде программного обеспечения и версии программного обеспечения как таковые (просто примеры):

  • База данных Oracle 1.1
  • Oracle 2.2
  • Платформа Oracle 3.3
  • Oracle DB 4.4
  • Oracle 50.50

Мой желаемый результат:

  • Oracle 1.1
  • Oracle 2.2
  • Oracle 3.3
  • Oracle 4.4
  • Oracle 50.50

Я могу успешно получить 4 из 5 из них с

 re.compile('Oracle d*.d*')
  

Проблема в «Oracle DB 4.4». Как мне заставить регулярное выражение игнорировать ‘DB’ и просто возвращать ‘Oracle 4.4’, но при этом продолжать работать для остальных входных данных?

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

1. можете ли вы просто выполнить replace(' DB', '') , а затем запустить регулярное выражение?

2. Регулярное выражение соответствует строкам и подстрокам, оно не изменяет их. Вы можете настроить его на соответствие, даже если DB присутствует, но для фактического удаления его из строки вам нужно будет выполнить операцию замены.

Ответ №1:

Вы могли бы использовать 2 группы захвата, где DB это необязательно

 (Oracle )(?:DB )?(d (?:.d ))
  

Демонстрация регулярных выражений | Демонстрация Python

Если десятичная часть не является необязательной:

 (Oracle )(?:DB )?(d .d )
  

При замене используйте 2 группы захвата.

 result = re.sub(regex, r"1 2", test_str)