1

我有一个字符串列表

goal0=1234.4334abc12423423
goal1=-234234
asdfsdf

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

1234.4334, -234234

(如果两个数字片段得到第一个)我应该如何轻松地做到这一点?

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

4

8 回答 8

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);
于 2012-10-12T13:42:06.403 回答
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+)?- 小数点后跟 1 个或多个数字,这是可选的

如果您的字符串包含多个小数点,这将起作用,并且如果有的话,它只会采用第一个小数点后的第一组数字。

于 2012-10-12T13:56:35.503 回答
2

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

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

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

finalNumber = Int32.Parse(x);
于 2012-10-12T13:37:57.057 回答
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;
}

希望能帮助到你。

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

于 2012-10-12T13:41:50.557 回答
1

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

Regex.Match(string, @"\d+")
于 2012-10-12T13:37:47.683 回答
1

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

result0 = Microsoft.VisualBasic.Conversion.Val(goal0);
result1 = Microsoft.VisualBasic.Conversion.Val(goal1);
于 2012-10-12T13:39:57.970 回答
0
string s = "1234.4334abc12423423";
var result = System.Text.RegularExpressions.Regex.Match(s, @"-?\d+");
于 2012-10-12T13:43:52.707 回答
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
    }
}
于 2012-10-12T14:10:57.170 回答