這是我的字符串值:如何從一個字符串中刪除字符,除了那些在列表
string str = "32 ab d32";
而且這個名單是我的允許的字符:
var allowedCharacters = new List<string> { "a", "b", "c", "2", " " };
我希望它變成:
str == " 2 ab 2";
我想更換,是不是在允許的角色列表中的任何字符,一個空的空間。
這是我的字符串值:如何從一個字符串中刪除字符,除了那些在列表
string str = "32 ab d32";
而且這個名單是我的允許的字符:
var allowedCharacters = new List<string> { "a", "b", "c", "2", " " };
我希望它變成:
str == " 2 ab 2";
我想更換,是不是在允許的角色列表中的任何字符,一個空的空間。
正則表達式?正則表達式對於你想要完成的事情可能是過度的。
這裏有沒有正則表達式的另一種變體(修改您的lstAllowedCharacters
實際上是字符的枚舉而不是字符串[作爲變量顧名思義]):
String original = "32 ab d32";
Char replacementChar = ' ';
IEnumerable<Char> allowedChars = new[]{ 'a', 'b', 'c', '2', ' ' };
String result = new String(
original.Select(x => !allowedChars.Contains(x) ? replacementChar : x).ToArray()
);
謝謝。是你的還是@Tim Schmelter的更好? – MonsterMMORPG
@MonsterMMORPG:取決於實施。字符串列表可能會失敗(因爲即使字符串被接受,Tim's實際上也只是比較字符 - 字符)。他們都這樣做,我只是把它比較明確。 –
沒有正則表達式:
IEnumerable<Char> allowed = srVariable
.Select(c => lstAllowedCharacters.Contains(c.ToString()) ? c : ' ');
string result = new string(allowed.ToArray());
是很好的解決方案 – MonsterMMORPG
你爲什麼不使用String.Replace?
試試這個:
string srVariable = "32 ab d32";
List<string> lstAllowedCharacters = new List<string> { "a", "b", "c", "2", " " };
srVariable = Regex.Replace(srVariable, "[^" + Regex.Escape(string.Join("", lstAllowedCharacters) + "]"), delegate(Match m)
{
if (!m.Success) { return m.Value; }
return " ";
});
Console.WriteLine(srVariable);
都能跟得上我希望它替換字符無法在預定義列表中未將它們定義爲英語新howed。 – MonsterMMORPG
但是,我已經調整了我的答案,注意模式中否定'^'字符。結果確實會返回你要求的「2 ab 2」。 –
可能要在插入到正則表達式之前調用['Regex.Escape()'](http://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.regex.escape.aspx) 。更換'呼叫以避免任何無效字符。導致:'Regex.Replace(srVariable,String.Format(「[^ {0}]」,Regex.Escape(String.Join(String.Empty,lstAllowedCharacters))))' –
下面是一個簡單而高性能的foreach的解決方案:
Hashset<char> lstAllowedCharacters = new Hashset<char>{'a','b','c','2',' '};
var resultStrBuilder = new StringBuilder(srVariable.Length);
foreach (char c in srVariable)
{
if (lstAllowedCharacters.Contains(c))
{
resultStrBuilder.Append(c);
}
else
{
resultStrBuilder.Append(" ");
}
}
srVariable = resultStrBuilder.ToString();
@des感謝我忘了codeing:d – MonsterMMORPG