如何只保留字符串中的数字和一些特殊字符?

时间:2016-02-28 05:59:46

标签: c# regex string

我有一个包含常规字符,特殊字符和数字的字符串。我试图删除常规字符,只保留数字和特殊字符。我使用循环来检查字符是特殊字符还是数字。然后,我用空字符串替换它。但是,这似乎不起作用,因为我收到错误"无法应用!=字符串或字符#34;。我的代码如下。如果可能的话,请给我一些想法来解决这个问题。感谢。

public string convert_string_to_no(string val)
{
    string str_val = "";
    int val_len = val.Length;
    for (int i = 0; i < val_len; i++)
    {
        char myChar = Convert.ToChar(val.Substring(i, 1));
        if ((char.IsDigit(myChar) == false) && (myChar != "-"))
        {
             str_val = str_val.replace(str_val.substring(i,1),"");
        }
    }
    return str_val;
} 

3 个答案:

答案 0 :(得分:5)

你可以使用正则表达式来做到这一点。比使用循环和清理

更快
    String test ="Q1W2-hjkxas1-EE3R4-5T";
    Regex rgx = new Regex("[^0-9-]");
    Console.WriteLine(rgx.Replace(test, ""));

检查工作代码here

答案 1 :(得分:3)

似乎尝试将“ - ”更改为“ - ”,最好构造字符串而不是替换字符。

public string convert_string_to_no(string val)
    {
        string str_val = "";
        int val_len = val.Length;
        for (int i = 0; i < val_len; i++)
        {
            char myChar = Convert.ToChar(val.Substring(i, 1));
            if (char.IsDigit(myChar) && myChar == '-')
            {
                 str_val +=  myChar; 
            }
        }
        return str_val;
    } 

答案 2 :(得分:2)

我更喜欢Linq:

public static class StringExtensions
{
  public static string ToLimitedString(this string instance,
    string validCharacters)
  {
    // null reference checking...

    var result = new string(instance
      .Where(c => validCharacters.Contains(c))
      .ToArray());

    return result;
  }
}

用法:

var test ="Q1W2-hjkxas1-EE3R4-5T";
var limited = test.ToLimitedString("01234567890-");
Console.WriteLine(limited);

结果:

  

12-1-34-5

DotNetFiddle Example