仅从字符串获取测量值

时间:2013-08-01 07:15:10

标签: c# regex replace

我有一个字符串,它以厘米,米或英寸为单位给出测量值。

例如:

数字可以是112厘米,1.12米,45英寸或45英寸。

我想只提取字符串的数字部分。知道如何使用单位作为分隔符来提取数字吗?

虽然我在这里,但我想忽略单位的情况。

由于

6 个答案:

答案 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

Demo

修改

示例代码:

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)。