我有以下代码要由正则表达式解析:
const string patern = @"^(\p{L}+)_";
var rgx = new Regex(patern);
var str1 = "library_log_12312_12.log";
var m = rgx.Matches(str1);
它只返回一个匹配项,它是“library_”。我已经阅读了很多资源,它不应该包含下划线,应该吗?
您的模式包括_
,所以匹配也包括在内。如果您只想要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
}
}
您的正则表达式基本上以这样的结尾_
,它匹配一个或多个 Unicode 字母,后跟一个下划线(这不是 Unicode 字母)。
捕获的组将不包含_
.
按预期工作。
它应该包含正则表达式中的下划线。
如果您只想获得library
结果,则需要访问结果中的第一个子组:
var m = rgx.Matches(str1).Cast<Match>().Select(x => x.Groups[1].Value);