【问题标题】:How do you remove all the alphabetic characters from a string?如何从字符串中删除所有字母字符?
【发布时间】:2020-06-07 21:32:19
【问题描述】:

我有一个包含字母字符的字符串,例如:

  1. 254.69 米
  2. 26.56 厘米
  3. 23.36 英寸
  4. 100.85 英尺

我想从上述字符串中删除所有字母字符(单位),以便我可以调用double.Parse() 方法。

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    这应该可行:

    // add directive at the top 
    using System.Text.RegularExpressions;
    
    string numberOnly = Regex.Replace(s, "[^0-9.]", "")
    

    【讨论】:

    • 可能想要保留任何标志:"[^0-9.+-]"
    • @BillP3rd - 但想要删除字母和字符串是带有数字的单位。你真的认为这是必需的吗?
    • 感谢 Pranay 的解决方案。 BillP3rd ,目前我不需要 +- 标志,但感谢您的更新,可能将来我确实想保留这些标志。
    • 此解决方案不适用于小数点在“.”之后的国家/地区的本地化
    • 这会为我删除点,例如24.99 somechracter -> 2499
    【解决方案2】:

    您应该能够使用正则表达式解决此问题。将以下引用添加到您的项目中:

    using System.Text.RegularExpressions;
    

    之后,您可以使用以下内容:

    string value = Regex.Replace(<yourString>, "[A-Za-z ]", "");
    double parsedValue = double.Parse(value);
    

    假设您只有字母字符和空格作为单位。

    【讨论】:

      【解决方案3】:

      使用 LINQ:

      using System.Linq;
      
      string input ="57.20000 KG ";
      string output = new string(input.Where(c=>(Char.IsDigit(c)||c=='.'||c==',')).ToArray());
      

      【讨论】:

      • 这只是一件小事:这个解决方案消除了对 System.Text.RegularExpressions 的依赖——这在我正在处理的当前应用程序中并不常用。
      【解决方案4】:

      Regex 和 Vlad 的 LINQ 答案很好地涵盖了解决方案。并且都是不错的选择。

      我遇到了类似的问题,但我也想用这个变体只显式去除字母,而不是去除空格等。

      我还希望它可以如下使用。任何其他解决方案都可以以类似的方式打包。

      public static string StripAlpha(this string self)
      {
          return new string( self.Where(c => !Char.IsLetter(c)).ToArray() );
      }
      
      public static string StripNonNumeric(this string self)
      {
          // Use Vlad's LINQ or the Regex Example
          return new string(self.Where(c=>(Char.IsDigit(c)||c=='.'||c==',')).ToArray()) ;  // See Vlad's
      
      }
      

      这将被用作:

      var newString = someString.StripAlpha();
      var newString2 = someString.StripNonNumeric();
      

      【讨论】:

        【解决方案5】:

        您好,另一个解决方案是:

        // add directive at the top 
        using System.Text.RegularExpressions;
        string s = "24,99";
        string numberOnly = Regex.Replace(s, "[^0-9,-]+", "")
        

        此解决方案不会删除点,例如来自 user1804084 的问题:

        这会为我删除点,例如24.99 somechracter -> 2499

        但是,它仍然可以转换为加减法正常工作的双精度数。

        【讨论】:

          【解决方案6】:

          使用来自 Google 的 Guava 库的 CharMatcher API:

          String magnitudeWithUnit = "254.69 meter";
          String magnitude = CharMatcher.inRange('a', 'z').or(inRange('A', 'Z')).removeFrom(magnitudeWithUnit);
          

          做静态导入CharMatcher.inRange(..)。您可以修剪结果的尾随空格。

          【讨论】:

          • 真的不建议为 c#/BCL 支持的东西使用外部依赖
          猜你喜欢
          • 2022-01-09
          • 1970-01-01
          • 2014-04-26
          • 1970-01-01
          • 2018-12-02
          • 2013-04-30
          • 1970-01-01
          • 2015-02-26
          • 2015-11-14
          相关资源
          最近更新 更多