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

时间:2010-11-08 23:24:34

标签: c# .net regex

Perl使用\ u运算符在使用字符串替换和正则表达式时小写匹配。 .Net有类似的东西吗?例如,大写所有以<

开头的单词
s/<\(\w*\)/<\U\1/

2 个答案:

答案 0 :(得分:3)

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

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

这些内容如下:每当您找到正则表达式时,请将其替换为第一个大写的组。

答案 1 :(得分:1)

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

在Perl中,\U\L等不是真正的正则表达式功能,它们是字符串功能,就像更常见的转义序列一样:\n,{{1它们在正则表达式文档中被冗余地列出,因为它们在正则表达式替换中特别有用。 C#在字符串文字或正则表达式类中没有它们的等价物,但正如@steinar指出的那样,它确实有MatchEvaluator和(自.NET 3.0以来)lambda表达式:

\t

输出:

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

编辑:在我的示例中,括号并不是必需的,但是我将它们留下来展示它们作为分组运算符的正确用法。我还将原始ABC<xyz! 更改为\w*;当你的唯一目标是改变单词字符的情况时,没有必要匹配零字符。