繁体   English   中英

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

[英]Is there a lowercase expression for .Net regular expressions?

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

s/<\(\w*\)/<\U\1/

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

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

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

你的Perl代码中有一些错误。 在Perl和.NET正则表达式中, \\(\\)匹配文字字符, () ; 要使用括号作为分组运算符,请保留反斜杠。 此外, \\u\u003c/code>不会小写匹配 ,它会标记下一个字符 (通常与大写相同)。 你想到的是\\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+ ; 当你唯一的目标是改变单词字符的情况时,没有必要匹配零字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM