【问题标题】:c# How do trim all non numeric character in a stringc#如何修剪字符串中的所有非数字字符
【发布时间】:2016-07-19 02:35:34
【问题描述】:

在具有字母前缀的字符串中修剪所有字母的更快方法是什么? 例如,输入 sting "ABC12345" ,我希望仅将 12345 作为输出。 谢谢。

【问题讨论】:

标签: c#


【解决方案1】:

请使用“char.IsDigit”,试试这个:

static void Main(string[] args)
{
    var input = "ABC12345";
    var numeric = new String(input.Where(char.IsDigit).ToArray());
    Console.Read();
}

【讨论】:

    【解决方案2】:

    您可以使用Regular Expressions 修剪字母前缀

    var input = "ABC123";
    var trimmed = Regex.Replace(input, @"^[A-Za-z]+", "");
    
    // trimmed = "123"
    

    replace 方法的正则表达式(第二个参数)^[A-Za-z]+ 完成了大部分工作,它使用以下规则定义要替换的内容:

    ^ 字符确保匹配只存在于字符串的开头
    [A-Za-z] 将匹配任何大写或小写字母
    + 表示大写或小写字母将尽可能连续匹配多次

    由于这是Replace 方法,因此第三个参数将所有匹配项替换为空字符串。

    【讨论】:

      【解决方案3】:

      其他答案似乎回答了什么是最慢的方式..所以如果你真的需要最快的方式,那么你可以找到第一个数字的索引并获取子字符串:

      string input = "ABC12345";
      int i = 0;
      while ( input[i] < '0' || input[i] > '9' ) i++;
      string output = input.Substring(i);
      

      获取值的最短方法可能是 VB Val 方法:

      double value = Microsoft.VisualBasic.Conversion.Val("ABC12345"); // 12345.0
      

      【讨论】:

      【解决方案4】:

      您必须使用正则表达式。您似乎只在寻找数字而不是字母。

      示例:

      string result =
        System.Text.RegularExpressions.Regex.Replace("Your input string", @"\D+", string.Empty);
      

      【讨论】:

      • 这将删除所有非数字字符。不仅仅是输入字符串开头的这些。
      • string result=System.Text.RegularExpressions.Regex.Replace("你的输入字符串", @"^\D+", string.Empty);只需将@"\D+" 更改为@"^\D+"。
      猜你喜欢
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2012-12-16
      • 2016-05-12
      相关资源
      最近更新 更多