我有一个包含字母字符的字符串,例如:
我想从上面提到的字符串中删除所有字母字符(单位),以便我可以调用double.Parse()
方法。
答案 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(..)
。您可以修剪尾随空格的结果。