繁体   English   中英

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

[英]Get the matches of a pattern in a 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()是否错误。

有什么想法吗?

您正在将正则表达式锚定在字符串的开头和结尾,因此它当然不匹配任何内容。

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

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

它返回了,正如您希望的那样:

[ColumnName]
[AnotherColumn]

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

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

应该做到的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM