1

来自 perl,我对 asp.net 正则表达式类有点困惑。

我有一个要匹配的简单模式:“数字文本数字”

我的代码如下所示:

     Match results = Regex.Match(mystring, @"(\d+)\s+(Highway|Hwy|Route|Rte)\s+(\d+)",RegexOptions.IgnoreCase);

     foreach (Group g in results.Groups)
     {
        string token = g.Value;
     }

问题是这些组似乎包含 4 个结果,而不是我期望的 3 个 - 第一个是匹配的整个字符串,而接下来的 3 个是我期望的。

有没有一种简单的方法可以直接访问我的 3 个结果?

4

3 回答 3

0

You could use Matches:

// Define a test string.        
string text = "The the quick brown fox  fox jumped over the lazy dog dog.";

// Find matches.
MatchCollection matches = rx.Matches(text);

// Report the number of matches found.
Console.WriteLine("{0} matches found in:\n   {1}", 
                      matches.Count, 
                      text);

// Report on each match.
foreach (Match match in matches)
{
    ...
}
于 2012-08-01T14:55:46.197 回答
0
var results = Regex.Match("55 Hwy 66", @"(\d+)\s+(Highway|Hwy|Route|Rte)\s+(\d+)", RegexOptions.IgnoreCase).Groups.OfType<Group>().Select((name, index) => new {name, index}).Where(x => x.index > 0).Select(x => x.name).ToList();
于 2012-08-01T14:53:37.763 回答
0

这只是它被设计为如何工作的一个例子,它只是一个忽略第一个匹配的例子。我确实同意这是一个奇怪的实现,而不是我期望它的工作方式。

如果正则表达式引擎可以找到匹配项,则 Groups 属性返回的 GroupCollection 对象的第一个元素包含与整个正则表达式模式匹配的字符串。

取自这里

我知道这是一个老问题,但我最终通过搜索确认了自己的想法,但没有明确的答案。

于 2013-05-15T10:19:43.767 回答