This is my string value:
string str = "32 ab d32";
And this list is my allowed characters:
var allowedCharacters = new List<string> { "a", "b", "c", "2", " " };
I want it to become:
str == " 2 ab 2";
I would like to replace any character that is not in the allowed character list, with an empty space.
Regex? Regex may be overkill for what you're trying to accomplish.
Here's another variation without regex (modified your lstAllowedCharacters
to actually be an enumerable of characters and not strings [as the variable name implies]):
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()
);
Without regex:
IEnumerable<Char> allowed = srVariable
.Select(c => lstAllowedCharacters.Contains(c.ToString()) ? c : ' ');
string result = new string(allowed.ToArray());
Try this:
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);
Here is a simple but performant foreach solution:
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();
Why don't you use String.Replace?