簡體   English   中英

LINQ查詢string.replace

[英]LINQ query for string.replace

在給定任何字符串的地方尋找幫助,返回僅包含字母數字字符的字符串,並用_替換所有非字母數字字符

字符串“ASD @#$ 123”變為“ASD___123”

等等

謝謝

對於大多數字符串操作,如果使用正則表達式而不是LINQ,最好(在 效率和 簡潔性方面):

string input = "ASD@#$123";
string result = Regex.Replace(input, "[^A-Z0-9]", "_", RegexOptions.IgnoreCase);

如果要保留任何Unicode字母數字字符,包括非ASCII字母(如é ,我們可以使用非單詞字符類使其更簡單:

string input = "ASD@#$123";
string result = Regex.Replace(input, @"\W", "_");

為了便於比較,這里使用LINQ進行相同的轉換(僅允許ASCII字母和數字):

string input = "ASD@#$123";
string result =
    new string(input.Select(c => 
        c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z' || c >= '0' && c <= '9' ? c : '_'
    ).ToArray());

或者,如果Char.IsLetterOrDigit符合您的要求:

string input = "ASD@#$123";
string result = 
    new string(input.Select(c => char.IsLetterOrDigit(c) ? c : '_').ToArray());

請注意, Char.IsLetterOrDigit將允許非ASCII字母,並且與我們的第二個示例中使用了否定的\\w字符字符類相比。

編輯 :正如Steve Wortham觀察到的那樣,LINQ版本實際上比正則表達式快3倍(即使使用RegexOptions.Compiled並重新使用Regex實例預先創建)。

char[] unwanted = new[] {'@', '#', '$'};

foreach(var x in query)
{
    x.SomePropertyName = string.Join("_", x.SomePropertyName.Split(unwanted));
};

LINQ lambda表達式替換字符串中的多個字符

這是你的功能:

    String ReplaceWrongChars(String baseString)
    {
        Regex rx = new Regex("[^A-Za-z0-9 ]", RegexOptions.CultureInvariant);
        String rv = rx.Replace(baseString, "_");

        return rv;
    }

如果您不需要包含空格,請使用“[^ A-Za-z0-9]”作為正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM