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

85

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

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

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

6个回答

164

这个应该可以工作:

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

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

29
可能希望保留任何符号:"[^0-9.+-]" - BillP3rd
@BillP3rd - 但是想要删除字母,而字符串是由带有数字的单位组成的。你真的认为这是必要的吗? - Pranay Rana
感谢Pranay提供的解决方案。BillP3rd,目前我不需要+-符号,但还是谢谢你的更新,也许将来我会想保留这些符号。 - Ashish Ashu
4
该解决方案无法很好地适用于小数点在“.”之后的国家的本地化。 - redsolo
请为我移除小数点,例如 24.99 somechracter -> 2499。 - user1804084
正则表达式在这里找到...使用 System.Text.RegularExpressions; - greg

26

您可以使用正则表达式来解决这个问题。将以下引用添加到您的项目中:

using System.Text.RegularExpressions;

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

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

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


这将在许多异常情况下失败。 - Leandro Bardelli
鉴于我只需要删除字母字符和空格,那么该如何操作呢? @LeandroBardelli - froeschli
字母字符不仅仅是字母。 - Leandro Bardelli
我的解决方案适用于问题中给出的所有示例。据我所知,没有包含特殊字符的单元。当然,这是我做出的一种假设。还有比我的答案更好的答案,例如被接受的答案。尽管如此,我的解决方案在给出问题示例时不会抛出任何异常... - froeschli

14

使用LINQ:

using System.Linq;

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

2
这只是一个小事情:这个解决方案消除了对 System.Text.RegularExpressions 的依赖 - 在我目前正在工作的应用程序中并不常用。 - qxotk

4

你好,另一种解决方案是:

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

这个解决方案不会删除点号,例如用户1804084的问题:
这段代码可以为我删除点号,例如24.99某些字符 -> 2499
但是它仍然可以转换为double类型,加减法像平常一样工作。

3
正则表达式和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();

-2
使用Google的Guava库中的CharMatcher API:
String magnitudeWithUnit = "254.69 meter";
String magnitude = CharMatcher.inRange('a', 'z').or(inRange('A', 'Z')).removeFrom(magnitudeWithUnit);

使用静态导入 CharMatcher.inRange(..)。你可以去掉结果中的尾部空格。


5
真的不建议为C#/BCL支持的东西使用外部依赖。 - Sam Shiles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接