我有一个字符串,它以厘米,米或英寸为单位给出测量值。
例如:
数字可以是112厘米,1.12米,45英寸或45英寸。
我想只提取字符串的数字部分。知道如何使用单位作为分隔符来提取数字吗?
虽然我在这里,但我想忽略单位的情况。
由于
答案 0 :(得分:2)
使用String.Split
http://msdn.microsoft.com/en-us/library/tabh47cf.aspx
类似的东西:
var units = new[] {"cm", "inches", "in", "m"};
var splitnumber = mynumberstring.Split(units, StringSplitOptions.RemoveEmptyEntries);
var number = Convert.ToInt32(splitnumber[0]);
答案 1 :(得分:2)
您可以尝试:
string numberMatch = Regex.Match(measurement, @"\d+\.?\d*").Value;
修改强>
此外,将此转换为双倍是微不足道的:
double result;
if (double.TryParse(number, out result))
{
// Yeiiii I've got myself a double ...
}
答案 2 :(得分:2)
使用Regex可以帮助您:
(?i)(\d+(?:\.\d+)?)(?=c?m|in(?:ch(?:es)?)?)
(?i) = ignores characters case // specify it in C#, live do not have it
\d+(\.\d+)? = supports numbers like 2, 2.25 etc
(?=c?m|in(ch(es)?)?) = positive lookahead, check units after the number if they are
m, cm,in,inch,inches, it allows otherwise it is not.
?: = specifies that the group will not capture
? = specifies the preceding character or group is optional
修改强>
示例代码:
MatchCollection mcol = Regex.Matches(sampleStr,@"(?i)(\d+(?:\.\d+)?)(?=c?m|in(?:ch(?:es)?)?)")
foreach(Match m in mcol)
{
Debug.Print(m.ToString()); // see output window
}
答案 3 :(得分:1)
我想我会尝试用“”替换每个不是数字的字符或“。”:
//s is the string you need to convert
string tmp=s;
foreach (char c in s.ToCharArray())
{
if (!(c >= '0' && c <= '9') && !(c =='.'))
tmp = tmp.Replace(c.ToString(), "");
}
s=tmp;
答案 4 :(得分:1)
尝试使用正则表达式\ d +来查找整数。
resultString = Regex.Match(measurementunit , @"\d+").Value;
答案 5 :(得分:0)
是否要求将该单位用作分隔符?如果没有,您可以使用正则表达式提取数字(参见Find and extract a number from a string)。