Lookaround регулярное выражение для оценки обеих сторон? - PullRequest
1 голос
/ 06 июля 2011

Хорошо, у меня довольно сложная проблема с регулярными выражениями.

Мне нужно сопоставить и заменить знаки + в следующих строках пробелами, поэтому строки слева должны стать строками справа.

1: word+word   =  word word
2: word+++word =  word + word
3: word.+word  =  word. word
4: word,+word  =  word, word

Мне удалосьприбавьте большинство из них этим, который проверяет строки до и после знака плюс:

(?<=[\w\.,])\+(?=[\w])

Однако я могу прибить только один набор смежных знаков плюс в (2) за раз:

(?<=[\w\.,\+])\+(?=[\w]) // gets the left plus sign
2: word+++word =  word++ word

(?<=[\w\.,])\+(?=[\w\+]) // gets the right plus sign
2: word+++word =  word ++word

В моем текущем состоянии безразличия регулярных выражений я задаюсь вопросом, нужно ли мне обернуть шаблон в более крупное состояние, или мне нужно реализовать либо один, либо шаблон в обходных путях.Есть ли какие-нибудь регулярные выражения для тех, кто хочет это сделать?

1 Ответ

3 голосов
/ 06 июля 2011

Это должно работать на ваших примерах:

(?<!\+)\+|\+(?!\+)

Замените это пробелами.

Пример:

perl -E "$_='a+b++a+++b++++c+++++d'; s/(?<!\+)\+|\+(?!\+)/ /g; say"

Выходы:

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