【发布时间】:2020-06-07 21:32:19
【问题描述】:
我有一个包含字母字符的字符串,例如:
- 254.69 米
- 26.56 厘米
- 23.36 英寸
- 100.85 英尺
我想从上述字符串中删除所有字母字符(单位),以便我可以调用double.Parse() 方法。
【问题讨论】:
我有一个包含字母字符的字符串,例如:
我想从上述字符串中删除所有字母字符(单位),以便我可以调用double.Parse() 方法。
【问题讨论】:
这应该可行:
// add directive at the top
using System.Text.RegularExpressions;
string numberOnly = Regex.Replace(s, "[^0-9.]", "")
【讨论】:
"[^0-9.+-]"
您应该能够使用正则表达式解决此问题。将以下引用添加到您的项目中:
using System.Text.RegularExpressions;
之后,您可以使用以下内容:
string value = Regex.Replace(<yourString>, "[A-Za-z ]", "");
double parsedValue = double.Parse(value);
假设您只有字母字符和空格作为单位。
【讨论】:
使用 LINQ:
using System.Linq;
string input ="57.20000 KG ";
string output = new string(input.Where(c=>(Char.IsDigit(c)||c=='.'||c==',')).ToArray());
【讨论】:
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();
【讨论】:
您好,另一个解决方案是:
// 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
但是,它仍然可以转换为加减法正常工作的双精度数。
【讨论】:
使用来自 Google 的 Guava 库的 CharMatcher API:
String magnitudeWithUnit = "254.69 meter";
String magnitude = CharMatcher.inRange('a', 'z').or(inRange('A', 'Z')).removeFrom(magnitudeWithUnit);
做静态导入CharMatcher.inRange(..)。您可以修剪结果的尾随空格。
【讨论】: