获取字符串中模式的匹配项

时间:2012-10-10 12:57:53

标签: c# regex string

我有以下正则表达式:

^[[][A-Za-z_1-9]+[\]]$

我希望能够在字符串中获得此正则表达式的所有匹配项。匹配的格式应为[Whatever]。在大括号内,还可能有_或数字字符。所以我写了下面的代码:

private const String REGEX = @"^[[][A-Za-z_1-9]+[\]]$"; 

static void Main(string[] args)
{
    String expression = "([ColumnName] * 500) / ([AnotherColumn] - 50)";

    MatchCollection matches = Regex.Matches(expression, REGEX);

    foreach (Match match in matches)
    {
        Console.WriteLine(match.Value);
    }

    Console.ReadLine();
}

但不幸的是,matches总是计为零。显然,正则表达式是检查整个String是否匹配,而不是从字符串中获取匹配项。我不确定正则表达式是错还是我使用Regex.Matches()的方式不正确。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

你正在将你的正则表达式锚定到字符串的开头和结尾,所以当然它不会匹配任何东西。

删除锚点(^表示开头,$表示结束)可以正常工作:

[[][A-Za-z_1-9]+[\]]

它会像您希望的那样返回:

[ColumnName]
[AnotherColumn]

答案 1 :(得分:6)

您需要从模式中删除字符串锚点(^$)的开始/结束,因为您要查找的匹配项实际上并不在字符串的开头和结尾。您也可以使用\[\]代替[[][\]]

private const String REGEX = @"\[[A-Za-z_1-9]+\]";

应该做的伎俩。