交换机语句中的正则表达式错误

时间:2016-03-03 09:29:04

标签: c# regex

我想创建一个接收字符串并输出数字的程序,希望使用正则表达式来节省工作量,这里有以下代码

public void main{
    string str = "abc-123.44def";
    string output = "";
    bool setA = false;

    StringBuilder stb = new StringBuilder();
    for(int i=0; i<str.Length; i++){
        switch(str[i]){
            case 'b':
                setA = foo();
                break;
            case 'c':
                foo2();
                break;
            case '\d':
            case '-':
            case '.':
                if(setA){
                    stb.Append(str[i]);
                }
                break;
            default:
                break;
        }
    }
    output = stb.toString();
}

public void foo(){
    return true;
}

问题是,编辑器给我一个错误说

  

无法识别的转义序列

'\d'部分的

。我见过允许这种用法的在线示例代码所以我不确定为什么我的编辑不接受这个。有人可以向我解释问题是什么以及如何解决?

编辑:看起来我的样本有点误导。我不能单独从字符串中取出数字,因为字符串中的其他字符调用不同的函数,我想要取出的数字字符取决于它们中的一些。我更新了代码以纠正错误信息。

2 个答案:

答案 0 :(得分:1)

您可以使用Char.IsDigit()检查字符是否为数字(正如我在第一条评论中所提到的):

string str = "abc-123.44def";
string output = "";
bool setA = false;

StringBuilder stb = new StringBuilder();
for(int i=0; i<str.Length; i++){
    switch(str[i]){
        case 'b':
          setA = foo();
          break;
        case 'c':
          foo2();
          break;
    //  case '\d': REMOVE IT
        case '-':
        case '.':
          if(setA){
             stb.Append(str[i]);
          }   
          break;
        default:
          if (Char.IsDigit(str[i])) stb.Append(str[i]); // Add this
            break;
          }
    }
    output = stb.ToString();
}

结果:

enter image description here

答案 1 :(得分:0)

这是你在找什么?

    Regex r = new Regex(@"\d+");
    string s = "abc-123.44def";

    var matches = r.Matches(s);
    List<string> numbersOnly = new List<string>();

    foreach (Match match in matches)
        numbersOnly.Add(match.Value);

    foreach (var number in numbersOnly)
        Console.WriteLine(number);

//output: 
//123
//44