[英]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.