Can I write this regex in one step?

Posted by Marin Doric on Stack Overflow See other posts from Stack Overflow or by Marin Doric
Published on 2010-04-07T07:24:18Z Indexed on 2010/04/07 7:33 UTC
Read the original article Hit count: 426

Filed under:
|
|
|

This is the input string "23x +y-34 x + y+21x - 3y2-3x-y+2". I want to surround every '+' and '-' character with whitespaces but only if they are not allready sourrounded from left or right side. So my input string would look like this "23x + y - 34 x + y + 21x - 3y2 - 3x - y + 2". I wrote this code that does the job:

    Regex reg1 = new Regex(@"\+(?! )|\-(?! )");
    input = reg1.Replace(input, delegate(Match m) { return m.Value + " "; });
    Regex reg2 = new Regex(@"(?<! )\+|(?<! )\-");
    input = reg2.Replace(input, delegate(Match m) { return " " + m.Value; });

explanation: reg1 // Match '+' followed by any character not ' ' (whitespace) or same thing for '-'

reg2 // Same thing only that I match '+' or '-' not preceding by ' '(whitespace)

delegate 1 and 2 just insert " " before and after m.Value ( match value )

Question is, is there a way to create just one regex and just one delegate? i.e. do this job in one step? I am a new to regex and I want to learn efficient way.

© Stack Overflow or respective owner

Related posts about c#

Related posts about regex