[英]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));
};
這是你的功能:
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.