2016-07-29 5 views
1

У меня есть файл с разделителями каналов и хочу заменить все вхождения | N.D. | с | | ,Regexp для замены повторяющейся строки

Я сделал это:

$line =~ s/\|N.D.\|/\| \|/g; 

, но если линия повторять Н.Д. так:

12354|this is test|N.D|N.D|some more text| 

будет заменить только один. Как его исправить, чтобы заменить все?

+0

Если он повторяется, вы хотите заменить все только одним трубой? В этом случае просто замените '/N\.D \\/g, ''' - который покидает первый канал и удаляет остальное – sideroxylon

+0

@sideroxylon имеет проблему, что он также заменит 'bar | somethingLeadingN.D | Foo' by 'bar | somethingLeadingFoo' – bwoebi

ответ

2

Обычно используется простой положительный предпросмотр для этого:

\|N\.D(?=\|) и заменить его |

$line =~ s/\|N\.D(?=\|)/\| /g; 

Таким образом, задняя | не входит в матче и на следующий матч будет иметь возможность начать там.

+0

Это прекрасно, спасибо! Вы заметили еще одну ошибку, с которой я не убежал. –