提取字符串中的数字

时间:2012-10-12 13:33:51

标签: c#

我有一个字符串列表

goal0=1234.4334abc12423423
goal1=-234234
asdfsdf

我想从以目标开头的字符串中提取数字部分, 在上述情况下是

1234.4334, -234234

(如果两个数字片段得到第一个)  我该怎么办呢?

请注意,“goal0 =”是字符串的一部分,goal0不是变量。 因此,我希望第一个数字片段位于“=”之后。

8 个答案:

答案 0 :(得分:4)

您可以执行以下操作:

        string input = "goal0=1234.4334abc12423423";
        input = input.Substring(input.IndexOf('=') + 1);

        IEnumerable<char> stringQuery2 = input.TakeWhile(c => Char.IsDigit(c) || c=='.' || c=='-');
        string result = string.Empty;
        foreach (char c in stringQuery2)
            result += c;
        double dResult = double.Parse(result);

答案 1 :(得分:3)

试试这个

string s = "goal0=-1234.4334abc12423423";
string matches =  Regex.Match(s, @"(?<=^goal\d+=)-?\d+(\.\d+)?").Value;

正则表达式说

  • (?<=^goal\d+=) - 背后的正面看法意味着回顾并确保goal(1 or more number)=位于字符串的开头,但不要使其成为匹配的一部分
  • -? - 可选的减号(?表示1或更多)
  • \d+ - 一个或多个数字
  • (\.\d+)? - 一个小数点,后跟一个或多个数字,这是可选的

如果您的字符串包含多个小数点,并且只有第一个小数点后面的第一组数字(如果有的话),这将有效。

答案 2 :(得分:2)

使用正则表达式进行提取:

x = Regex.Match(string, @"\d+").Value;

现在使用以下命令将结果字符串转换为数字:

finalNumber = Int32.Parse(x);

答案 3 :(得分:2)

请试试这个:

string sample = "goal0=1234.4334abc12423423goal1=-234234asdfsdf";

Regex test = new Regex(@"(?<=\=)\-?\d*(\.\d*)?", RegexOptions.Singleline);
MatchCollection matchlist = test.Matches(sample);

string[] result = new string[matchlist.Count];
if (matchlist.Count > 0)
{
    for (int i = 0; i < matchlist.Count; i++)
    result[i] = matchlist[i].Value;
}

希望它有所帮助。

我一开始没有得到这个问题。对不起,但它现在有效。

答案 4 :(得分:1)

我认为这个简单的表达应该有效:

Regex.Match(string, @"\d+")

答案 5 :(得分:1)

您可以使用C#中的旧VB Val()函数。这将从字符串的前面提取一个数字,它已经在框架中可用:

result0 = Microsoft.VisualBasic.Conversion.Val(goal0);
result1 = Microsoft.VisualBasic.Conversion.Val(goal1);

答案 6 :(得分:0)

string s = "1234.4334abc12423423";
var result = System.Text.RegularExpressions.Regex.Match(s, @"-?\d+");

答案 7 :(得分:0)

List<String> list = new List<String>();

list.Add("goal0=1234.4334abc12423423");
list.Add("goal1=-23423");
list.Add("asdfsdf");

Regex regex = new Regex(@"^goal\d+=(?<GoalNumber>-?\d+\.?\d+)");

foreach (string s in list)
{
    if(regex.IsMatch(s))
    {
        string numberPart = regex.Match(s).Groups["GoalNumber"];

        // do something with numberPart
    }
}