-1

我有以下代码要由正则表达式解析:

        const string patern = @"^(\p{L}+)_";
        var rgx = new Regex(patern);
        var str1 = "library_log_12312_12.log";
        var m = rgx.Matches(str1);

它只返回一个匹配项,它是“library_”。我已经阅读了很多资源,它不应该包含下划线,应该吗?

4

3 回答 3

4

您的模式包括_,所以匹配也包括在内。如果您只想要group,则需要指定。它将在第 1 组(因为第 0 组始终是整场比赛):

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        var regex = new Regex(@"^(\p{L}+)_");
        var input = "library_log_12312_12.log";
        var matches = regex.Matches(input);
        var match = matches[0];
        Console.WriteLine(match.Groups[0]); // library_
        Console.WriteLine(match.Groups[1]); // library
    }
}
于 2013-01-16T14:48:33.113 回答
0

您的正则表达式基本上以这样的结尾_,它匹配一个或多个 Unicode 字母,后跟一个下划线(这不是 Unicode 字母)。

捕获的组将不包含_.

按预期工作。

于 2013-01-16T14:48:38.780 回答
0

它应该包含正则表达式中的下划线。

如果您只想获得library结果,则需要访问结果中的第一个子组:

var m = rgx.Matches(str1).Cast<Match>().Select(x => x.Groups[1].Value);
于 2013-01-16T14:49:08.280 回答