C# .Net正则表达式是否有小写表达式?
在使用字符串替换和正则表达式时,Perl使用\u运算符将匹配项小写。Net有类似的功能吗?例如,以a开头的所有大写单词在.NET中执行此类操作的方法是使用MatchEvaluator参数: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());
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]作为一般方法是否更合适?有些正则表达式中没有分组。