开发者

Capturing the first match with regex (C#)

This is my first experience with C# and part of my limited experience with regular expressions a开发者_如何学Cnd I'm having trouble capturing the first occurrence of a match in a particular expression. I believe the following example would make it more clear than words in describing what I want to do.

Match extractor = (new Regex(@".*\d(?<name>.*)\d.*")).Match("This hopefully will pick up 1Bob9error1 as a name");
        Console.WriteLine(extractor.Groups["name"]);

I would like to this expression to print "Bob" instead of "error".

I have a hunch it has something to do with the ? in front of the matching group, but I'm not exactly sure what operation the ? performs in this particular case. An explanation along with some help would be wonderful.

Thanks guys, you have no idea how much this site helps a beginning programmer like me.


Your problem is greed. Regex greediness that is. Your .* at the start grabs all this "This hopefully will pick up 1Bob" . try this Regex instead:

\d(?<name>[^\d]+)\d


Matches the preceding element zero or one time. It is equivalent to {0,1}. ? is a greedy quantifier whose non-greedy equivalent is ??.

Taken from here. Site includes a cheat-sheet for regular expressions, and looking at your expression I can't seem to figure out what may be wrong with it.

My assumption is that it might be matching the last occurrence of your expression.


Each Group item has a Captures collection, you can access the first capture for a group using:

extractor.Groups["name"].Captures[0]


The bracketing * characters around your expression are causing your trouble. Remember you don't need a regular expression that matches the entire string - you want it to match only a particular pattern when it appears. The following code works:

Regex pattern = new Regex(@"\d(?<name>.*?)\d");
MatchCollection matches = pattern.Matches("This hopefully will pick up 1Bob9error1 as a name");
Console.WriteLine(matches[0].Groups["name"]);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜