C# 为什么my\p{L}返回下划线?
我有以下代码要由正则表达式解析:C# 为什么my\p{L}返回下划线?,c#,regex,C#,Regex,我有以下代码要由正则表达式解析: const string patern = @"^(\p{L}+)_"; var rgx = new Regex(patern); var str1 = "library_log_12312_12.log"; var m = rgx.Matches(str1); 它只返回一个匹配项,即“library”。我已经阅读了大量的参考资料,它不应该包含下划线,是吗?您的模式包括\u,因此匹配也包含下划线。
const string patern = @"^(\p{L}+)_";
var rgx = new Regex(patern);
var str1 = "library_log_12312_12.log";
var m = rgx.Matches(str1);
它只返回一个匹配项,即“library”。我已经阅读了大量的参考资料,它不应该包含下划线,是吗?您的模式包括
\u
,因此匹配也包含下划线。如果只需要该组,则需要指定该组。它将在第1组中(因为第0组始终是整场比赛):
您的正则表达式以结尾,因此基本上,它匹配一个或多个Unicode字母,后跟下划线(不是Unicode字母)
捕获的组将不包含。
按预期工作。它应该包含下划线,就像它在正则表达式中一样
如果只想将库作为结果,则需要访问结果中的第一个子组:
var m = rgx.Matches(str1).Cast<Match>().Select(x => x.Groups[1].Value);
var m=rgx.Matches(str1.Cast().Select(x=>x.Groups[1].Value);
您希望发生什么?如果您使用“回头看”而不是“组”,可能会更清楚:^\p{L}+(?=)
谢谢。这是我在C#Regex中不理解的。A欣赏它。
var m = rgx.Matches(str1).Cast<Match>().Select(x => x.Groups[1].Value);