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