Вставить символы (дефисы) между совпадениями в RegEx

Я использую регулярные выражения, чтобы найти очень простые шаблоны.

Однако я хочу вставить между совпадениями символ дефиса.

Я хорошо знаком с написанием шаблонов соответствия RegEx, но не могу использовать замену RegEx для вставки символов.

Мой RegEx:
(\ d {1,2}) ([AZ] {1,3}) (_)? (\ D {3,4})
который Спички:

  • 03EM0109
  • 03EM0112
  • 03EM0151
  • 3V204
  • 02SDV_0900

Я хотел бы, чтобы на выходе с использованием RegEx Replace вводились дефисы между совпадениями, чтобы дать мне:

  • 03-EM-0109
  • 03-EM-0112
  • 03-EM-0151
  • 3-V-204
  • 02-SDV-0900

Я попытался изменить RegEx и ввести пронумерованные группы захвата для нулевых шаблонов между ними, но при использовании функции замены это возвращает только дефисы. Предположительно потому, что группа нулевого захвата на самом деле ничего не захватывает?

Использование:
(\ d {1,2}) () ([A – Z] {1,3}) () (_)? () (\ D {3,4})

При замене на 2–4–5 долл. США
возвращает 3 дефиса - - -

Может ли кто-нибудь помочь ....


person GoodJuJu    schedule 12.08.2020    source источник
comment
(\d{1,2})([A-Z]{1,3})_?(\d{3,4}) - ›$1-$2-$3 (демонстрация)   -  person Wiktor Stribiżew    schedule 12.08.2020
comment
См. Это: regex101.com/r/4rCCti/1   -  person anubhava    schedule 12.08.2020
comment
Спасибо, я понимаю, в чем моя проблема. Я тестировал его только на первой пронумерованной группе захвата.   -  person GoodJuJu    schedule 13.08.2020


Ответы (1)


Если вы используете RegExp (\d{1,2})([A-Z]{1,3})_?(\d{3,4}) и замените его на $1-$2-$3, то, похоже, он даст желаемые результаты. Я удалил группу захвата вокруг подчеркивания

person Lebster    schedule 12.08.2020
comment
Спасибо, Лебстер, это была группа захвата вокруг подчеркивания, вызывающая проблему? - person GoodJuJu; 13.08.2020
comment
Это было и с вашими пустыми группами захвата. Вы заменяли каждое совпадение двумя пустыми группами, разделенными тире (в результате получалось 2 тире), а затем подчеркиванием, если оно было, но ничего, если его не было. - person Lebster; 13.08.2020