#regex
#регулярное выражение
Вопрос:
У меня есть строка, подобная '00122021300123024'
Я хочу удалить только один '0'
не '00'
означает, что выход должен быть '001222130012324'
[ПРИМЕЧАНИЕ: я использую функцию ORACLE 11g regexp_replace]
Комментарии:
1. Как насчет тройных 0? например, 000
2. Не могли бы вы уточнить, на каком языке вы это делаете?
Ответ №1:
Не оглядываясь, найдите ([123456789]|^)0([123456789]|$)
и замените на $ 1 $ 2, где $ 1 — первая группа захвата, а $ 2 — вторая (или 1 2).
Для Oracle SQL:
select regexp_replace('00122021300123024', '([123456789]|^)0([123456789]|$)', '12') from dual;
Не проверено, но оно должно работать.
Комментарии:
1. не совсем достойно отдельного ответа, но немного более краткая версия
([1-9]|^)0([1-9]|$)
2. Действительно, да 🙂 Забыл тире
Ответ №2:
Если ваш язык поддерживает поисковые запросы, вы можете использовать:
(?<!0)0(?!0)
Комментарии:
1. я использую ORACLE 11g regexp_replace. не могли бы вы, пожалуйста, объяснить more.it это не работает на меня..
2. @vikash: я не знаю, какой тип регулярных выражений они используют, и как следует вызывать эту функцию, так что нет, я не могу дать вам больше информации. Вполне может быть, что они не поддерживают поиск, но это должно быть описано где-нибудь в документации (а также как вызвать эту функцию). Мораль: всегда указывайте с самого начала, с каким языком / регулярным выражением вы имеете дело.
3. ORACLE 11g regexp_replace не поддерживает поиск. Смотрите мой ответ ниже.
Ответ №3:
Не уверен, на каком языке вы кодируете, но вот как это сделать на python:
In [1]: import re
In [2]: x = "00122021300123024"
In [3]: print x
00122021300123024
In [4]: x_after_replace = re.sub("(?<!0)0(?!0)", "", x)
In [5]: print x_after_replace
001222130012324