Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: Regex to add space after punctuation sign

by davido (Archbishop)
on Jan 08, 2004 at 08:42 UTC ( #319748=note: print w/ replies, xml ) Need Help??


in reply to Regex to add space after punctuation sign

This seems to pass my limited testing...

use strict; use warnings; my $string = '1,2,a,b,3'; $string =~ s/( (?:(?<!\d)(?:,|\.)(?!\s*\d)) | (?:(?<=\d)(?:,|\.)(?=\s*)(?!\d)) | (?:(?<!\d)(?:,|\.)(?=\s*\d)) ) /$1 /gx; print $string, "\n";

It's really ugly, but triggers a substitution all of the following cases:

  • Comma or dot is not surrounded by digits, with optional whitespace after the comma or dot.
  • Comma or dot doesn't have a digit to the left, with optional whitespace after the comma or dot.
  • Comma or dot doesn't have a digit to the right, with optional whitespace after the comma or dot.

So I think it meets your spec. If this is homework I would seriously recommend immersing yourself in the POD's so that you'll be able to explain to your professor how it is you came up with such a wild RE. For that matter, it's time that I re-read the POD's, as I'm not convinced that it really needs to be so explicit to work properly.

See perlre to learn about zero-width lookahead and lookbehind (positive and negative). Also read perlretut and perlop under the "Regexp quote like characters" section, for starters.


Dave


Comment on Re: Regex to add space after punctuation sign
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://319748]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2014-11-26 06:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (163 votes), past polls