正在分析度量单位
本文关键字:度量 单位 | 更新日期: 2023-09-27 18:24:46
我有以下字符串:
string value = "123.456L";
将这个字符串解析为字符串和双字符串的最佳方法是什么:
double number = 123.456;
string measure = "L"
代替L,我们还可以有其他东西,如oz
、m/s
、liter
、kilograms
等
假设度量单位始终表示为字符串后面的单个字符,则可以执行以下操作:
string value = "123.456L";
var pos = value.LastIndexOfAny("0123456789".ToCharArray());
double number = double.Parse(value.Substring(0, pos+1));
string measure = value.Substring(pos+1);
根据解释输入的注释,我将使用Regex。
double number = double.Parse(Regex.Match(value, @"['d.]+").Value);
string measure = value.Replace(number.ToString(), "");
正则表达式['d.]
将匹配任何数字或.
,+
表示它必须用于1个或多个匹配。
我会这样做:
public bool TryParseUnit ( string sValue, out double fValue, out string sUnit )
{
fValue = 0;
sUnit = null;
if ( !String.IsNullOrEmpty ( sValue ) )
{
sUnit = GetUnit ( sValue );
if ( sUnit != null )
{
return ( Double.TryParse ( sValue.Substring ( sValue.Length - sUnit.Length ),
out fValue );
}
}
return ( false );
}
private string GetUnit ( string sValue )
{
string sValue = sValue.SubString ( sValue.Length - 1 );
switch ( sValue.ToLower () )
{
case "l":
return ( "L" );
}
return ( null );
}
我知道它比其他答案更复杂,但通过这种方式,您也可以在解析过程中验证数据并丢弃无效输入。
您可以使用regex
using System.Text.RegularExpression;
Regex reg = new Regex(@"(['d|'.]*)('w*)");
string value = "123.4L";
MatchCollection matches = reg.Matches(value);
foreach (Match match in matches)
{
if (match.Success)
{
GroupCollection groups = match.Groups;
Console.WriteLine(groups[1].Value); // will be 123.4
Console.WriteLine(groups[2].Value); // will be L
}
}
所以这将要做的是查找0或更多的数字或".",然后对它们进行分组,然后查找任何字符(0或更多)。然后,您可以从每个匹配中获取组并获得值。如果你想改变测量类型,这将起作用,如果你没有小数点,这也将起作用。
编辑:需要注意的是,必须将组[1]用于第一组,将组[2]用于第二组。如果使用组[0],它将显示原始字符串。
您可能想看看GitHub和NuGet上的Units.NET。它支持解析不同文化中的缩写,但它仍然在我的TODO列表中,以添加对解析数字和单位组合的支持。我已经在一个相关的项目上做了这件事,所以应该直接添加。
2015年4月更新:您现在可以通过Length.Parse("5.3 m");
和其他单元的类似方法解析单元和值。
简单来说:查找0..9或。把它们修剪成一根新的绳子,然后把最后一部分放在第二根绳子上。一分钟后我就不能给出代码了。
编辑:是的,我指的是数字0-9,更正了它。但更容易的是获得最后一个数字的索引,并忽略之前的内容进行修剪。
你可以试试这个:
string ma = Regex.Match(name, @"(('d's)|('d+'s)|('d+)|('d+'.'d+'s))(g's|kg's|ml's)").Value;
这将匹配:
40克、40克、12.5克、1公斤、2公斤、150毫升。。。。