#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)