Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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# .Net正则表达式是否有小写表达式?_C#_.net_Regex - Fatal编程技术网

C# .Net正则表达式是否有小写表达式?

C# .Net正则表达式是否有小写表达式?,c#,.net,regex,C#,.net,Regex,在使用字符串替换和正则表达式时,Perl使用\u运算符将匹配项小写。Net有类似的功能吗?例如,以a开头的所有大写单词在.NET中执行此类操作的方法是使用MatchEvaluator参数: string pattern = @"<(\w*)"; string replaced = Regex.Replace(line, pattern, x => "<" + x.Groups[1].ToString().ToUpper());

在使用字符串替换和正则表达式时,Perl使用\u运算符将匹配项小写。Net有类似的功能吗?例如,以a开头的所有大写单词在.NET中执行此类操作的方法是使用MatchEvaluator参数:

string pattern = @"<(\w*)";
string replaced = Regex.Replace(line, pattern, 
                  x => "<" + x.Groups[1].ToString().ToUpper());     

这是这样的:只要找到正则表达式,就用大写的第一组替换它。

在.NET中执行此类操作的方法是使用MatchEvaluator参数:

string pattern = @"<(\w*)";
string replaced = Regex.Replace(line, pattern, 
                  x => "<" + x.Groups[1].ToString().ToUpper());     

这是这样的:只要找到正则表达式,就用大写的第一组替换它。

您的Perl代码中有一些错误。在Perl和.NET正则表达式中,\和\匹配文字字符,和;要使用括号作为分组运算符,请禁用反斜杠。此外,\u不将匹配项小写,它的标题通常与下一个字符的大写相同。您考虑的是\L,它将所有字符小写,直到字符串结尾或\E,以先到者为准

在Perl中,\U,\L等不是真正的正则表达式功能,而是字符串功能,就像更常见的转义序列:\n,\t等。。它们被冗余地列在正则表达式文档中,因为它们在正则表达式替换中特别有用。C在字符串文本或正则表达式类中都没有与之等效的表达式,但正如@steinar所指出的,它确实有MatchEvaluator,而且由于.NET 3.0 lambda表达式:

string s = "ABC<XYZ!";
Console.WriteLine(Regex.Replace(s, @"<(\w+)", m => m.Value.ToLower()));
输出:

ABC<xyz!

编辑:在我的示例中,括号并不是必需的,但我保留了它们以演示它们作为分组运算符的正确用法。我还将原来的\w*更改为\w+;当您的唯一目标是更改单词字符的大小写时,匹配零单词字符没有意义。

您的Perl代码中有一些错误。在Perl和.NET正则表达式中,\和\匹配文字字符,和;要使用括号作为分组运算符,请禁用反斜杠。此外,\u不将匹配项小写,它的标题通常与下一个字符的大写相同。您考虑的是\L,它将所有字符小写,直到字符串结尾或\E,以先到者为准

在Perl中,\U,\L等不是真正的正则表达式功能,而是字符串功能,就像更常见的转义序列:\n,\t等。。它们被冗余地列在正则表达式文档中,因为它们在正则表达式替换中特别有用。C在字符串文本或正则表达式类中都没有与之等效的表达式,但正如@steinar所指出的,它确实有MatchEvaluator,而且由于.NET 3.0 lambda表达式:

string s = "ABC<XYZ!";
Console.WriteLine(Regex.Replace(s, @"<(\w+)", m => m.Value.ToLower()));
输出:

ABC<xyz!
编辑:在我的示例中,括号并不是必需的,但我保留了它们以演示它们作为分组运算符的正确用法。我还将原来的\w*更改为\w+;当您的唯一目标是更改单词字符的大小写时,匹配零单词字符是没有意义的。

可能重复的可能重复的可能重复的可能重复作为一种通用方法,使用组[0]更合适吗?某些正则表达式中没有分组。使用组[0]作为一般方法是否更合适?有些正则表达式中没有分组。