Perl使用\ u运算符在使用字符串替换和正则表达式时小写匹配。 .Net有类似的东西吗?例如,大写所有以<
开头的单词s/<\(\w*\)/<\U\1/
答案 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*
;当你的唯一目标是改变单词字符的情况时,没有必要匹配零字符。