Замените регулярное регулярное выражение - PullRequest
2 голосов
/ 24 февраля 2020

Мне нужно найти и заменить повторяющийся узор в строке. Точнее, мне нужна строка вроде:

Test - - - - - - - - - - - test

Чтобы стать

Test - test

Но так как я не знаю, сколько раз повторяется шаблон, я не могу найти ответ к этому. Самое близкое, что я получил, это:

((- -)|( - ))+?

Но это не помогает в приведенном выше примере.

Еще один "почти" результат, который я получил:

([- ]+?)\1+

Но второй один соответствует (и я не хочу):

test   ---- test

Есть идеи о том, как подойти к этому?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2020

В первом шаблоне, который вы пробовали ((- -)|( - ))+?, вы получаете несколько совпадений, что делает квантификатор +? не жадным.

Во втором шаблоне ([- ]+?)\1+ повторяется класс символов [- ]+, который может соответствовать один и тот же символ несколько раз.


Вы можете сопоставить один дефис и повторить 1+ раз, сопоставляя пробел и дефис, чтобы получить непрерывное совпадение без групп.

-(?: -)+

В замена использования -

Regex demo

2 голосов
/ 24 февраля 2020

Согласно моему комментарию:

(\s-)+

Заменить на $1. Смотри здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...