регулярное выражение: заменить символ ‘0’ из строки

#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