Problem with logicalOR ( regex ) not greedy
Posted
by Marin Doric
on Stack Overflow
See other posts from Stack Overflow
or by Marin Doric
Published on 2010-04-04T12:59:25Z
Indexed on
2010/04/04
13:03 UTC
Read the original article
Hit count: 481
This is the part of a string "21xy5". I want to insert " * " surrounded with whitespace between: digit and letter, letter and digit, letter and letter. I use this regex pattern "\d[a-z]|[a-z]\d|[a-z][a-z]" to find indexs where I gona insert string " * ". Problem is that when regex OR(|) in string 21xy5 trays to match 21-x|x-y|y-5, when first condition 21-x success, second x-y is not checked, and third success. So I have 21 * xy * 5 instead 21 * x * y * 5. If input string is like this xy21, then x-y success and then I have x * y21. Problem is that logical OR is not greedy.
Regex reg = new Regex(@"\d[a-z]|[a-z]\d|[a-z][a-z]" );
MatchCollection matchC;
matchC = reg.Matches(input);
int ii = 1;
foreach (Match element in matchC)
{
input = input.Insert(element.Index + ii, " * ");
ii += 3;
}
return input;
© Stack Overflow or respective owner