in reply to Beginner question about search and replace
First let me explain why your solution doesn't work as expected:
s///g starts each match where the previous match left off, or at the start of the string for the first match.
The first match finds 1 2, and the next match searches for a \d, which is the 3 -- no overlap occurs.
A possible fix is to not match the second digit:
s/(\d)\s+/$1;/g;
Which produces the output you want. If it's important that no substitution happens after a number but before a letter, you can use
s/(\d)\s+(?=\d)/$1;/g;
The (?=\d) looks for a digit, but it doesn't consume it (search for look-ahead in perlre).
Update: Kudos for supplying your code, actual output and expected output. It makes answering your question easy, and can't be taken for granted. Welcome to perlmonks!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Beginner question about search and replace
by hilbert (Acolyte) on Sep 16, 2011 at 11:47 UTC | |
|
Re^2: Beginner question about search and replace
by Anonymous Monk on Sep 16, 2011 at 17:36 UTC |