2010-11-08 103 views
1

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

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

[C#中的正则表达式大写替换]的可能的重复(http://stackoverflow.com/questions/205382/regular-expression-uppercase-replacement-in-c) – bzlm 2010-11-08 23:27:53

回答

3

开始做这几样在.NET事物的方法是使用MatchEvaluator参数的所有单词:

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

这写道:当你发现正规表达,用第一组大写替换它。

+0

会使用'Groups [0]'更多作为一般方法适当?有些正则表达式在它们中没有分组。 – 2010-11-09 01:45:28

1

你的Perl代码中有一些错误。在Perl和.NET正则表达式中,\(\)与文字字符()相匹配;要将括号用作分组操作符,请将反斜杠关闭。另外,\u不是小写匹配,它titlecases(通常与大写相同)接下来的字符。你在想什么是\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+;当你唯一的目标是改变单词字符的情况时,没有与零字符匹配的点。