Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么my\p{L}返回下划线?_C#_Regex - Fatal编程技术网

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);