如何从字符串中删除所有字母字符?

时间:2010-09-02 06:38:30

标签: c# .net

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

  1. 254.69米
  2. 26.56 cm
  3. 23.36英寸
  4. 100.85英尺
  5. 我想从上面提到的字符串中删除所有字母字符(单位),以便我可以调用double.Parse()方法。

6 个答案:

答案 0 :(得分:96)

这应该有效:

// add directive at the top 
using System.Text.RegularExpressions;

string numberOnly = Regex.Replace(s, "[^0-9.]", "")

答案 1 :(得分:21)

您应该可以使用Regex解决此问题。将以下引用添加到项目中:

using System.Text.RegularExpressions;

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

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

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

答案 2 :(得分:5)

使用LINQ:

using System.Linq;

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

答案 3 :(得分:1)

另一个解决方案是:

// 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

但是,它仍然可以转换为双精度形式,其中加法和减法正常工作。

答案 4 :(得分:0)

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

我有一个类似的问题,但是我也只想使用此变体来显式地去除字母,而不是去除空格等。

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

List<Country> result = countries.stream()...
result.forEach(...)

然后将其诸如:

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(input.Where(c=>(Char.IsDigit(c)||c=='.'||c==',')).ToArray()) ;  // See Vlad's

}

答案 5 :(得分:-1)

使用Google的Guava库中的CharMatcher API:

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

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