How to remove characters from a string, except those in a list

后端 未结 5 1974
感情败类
感情败类 2021-01-24 05:16

This is my string value:

string str = \"32 ab d32\";

And this list is my allowed characters:

var allowedCharacters = new List&l         


        
相关标签:
5条回答
  • 2021-01-24 05:36

    Why don't you use String.Replace?

    0 讨论(0)
  • 2021-01-24 05:49

    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);
    
    0 讨论(0)
  • 2021-01-24 05:52

    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()
    );
    
    0 讨论(0)
  • 2021-01-24 05:55

    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();
    
    0 讨论(0)
  • 2021-01-24 05:56

    Without regex:

    IEnumerable<Char> allowed = srVariable
        .Select(c => lstAllowedCharacters.Contains(c.ToString()) ? c : ' ');
    string result = new string(allowed.ToArray());
    
    0 讨论(0)
提交回复
热议问题