Jόrgen Krδmer wrote:
Hi,
Nikolaos A. Patsopoulos wrote:
Tim Chase wrote:
I have a text that has many occurrences of a pattern . I want to delete
every consecutive occurrence, e.g.
Pattern Pattern other text Pattern Pattern Pattern Pattern other text
Pattern Pattern Pattern
should look like this:
Pattern other text Pattern other text Pattern
I've used:
:%s/\(Pattern\s\+\)\(Pattern\)/\1/g
but have to run this more than once with: %&g to result the wanted text.
Can I do this with one command only? If not can I write a while function?:
You seem to be close. The following did it for me,
:%s/\(Pattern\)\(\s\+Pattern\)\+/\1/g
or, if you're lazy,
:%s/\(Pattern\)\(\s\+\1\)\+/\1/g
(no need to type the Pattern a 2nd time)
I tried Jorgen' s code (all possible ways) but I still had to run the
command more than once.
strange, the only difference between Tim's and my versions where the \+
he used after the second parenthesis and the * I used. As both \+ and *
are greedy, this should not make a difference for the final result, only
maybe in speed.
Just out of curiosity could you show me/us the exact command you used?
Regards,
Jόrgen
I started copy-pasting the commands and realized that I used:
:%s/\(<Author .\{-}<\/Author>)\)\(\s\+<Author .\{-}<\/Author>\)*/\1/g
^ [one extra ( ]
instead of
:%s/\(<Author .\{-}<\/Author>\)\(\s\+<Author .\{-}<\/Author>\)*/\1/g
That's why the code failed. Sorry for my mistake.
Nikos