2010-11-08 106 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+;當你唯一的目標是改變單詞字符的情況時,沒有與零字符匹配的點。