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

Reply via email to