Заменить символ с помощью regexp_replace после и до символа - PullRequest
2 голосов
/ 21 сентября 2019

Я новичок, используя REGEXP_REPLACE().Я хочу заменить 0 на '-' цифру, например: 30000000176215001500 мы получаем 3-176215001500

Я пытался использовать regexp_replace('30000000176215001500','([0])','-'), но он меняет все 0 s на -.

Это то, что я ожидаю:

  1. 30000001174934177910: 3-1174934177910
  2. 30000000174934177910: 3-174934177910
  3. 301873130520: 3-1873130520
  4. 300173130520: 3-173130520

1 Ответ

5 голосов
/ 21 сентября 2019

Рассмотрим:

regexp_replace(mycol,'0+','-', 1, 1)

Обоснование: пятый параметр, который больше 0, указывает, какое событие следует заменить;когда он установлен в 0, все вхождения заменяются.

Другие заметные изменения в вашем исходном регулярном выражении:

  • круглые скобки определяют группу захвата;так как вам не нужно захватывать, есть лишние
  • скобки, определяющие класс символов;не требуется, поскольку вы сопоставляете один символ

Демонстрация на DB Fiddle :

with a as (
    select '30000001174934177910' mycol from dual
    union all select '30000000174934177910' from dual
    union all select '301873130520' from dual
    union all select '300173130520' from dual
)
select mycol input, regexp_replace(mycol,'0+','-', 1, 1) output from a
INPUT                | OUTPUT         
:------------------- | :--------------
30000001174934177910 | 3-1174934177910
30000000174934177910 | 3-174934177910 
301873130520         | 3-1873130520   
300173130520         | 3-173130520    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...