C# 在大字符串中查找浮点

C# 在大字符串中查找浮点,c#,regex,string,floating-point,double,C#,Regex,String,Floating Point,Double,我有一个大字符串,字符串中有一系列浮点。一个典型的字符串应该有项目X$4.50项目描述\r\n\r\n项目Z$4.75…文本实际上没有押韵或原因。我已经有了最低值,我需要找到字符串中的所有值。因此,如果它是10.00,它将找到10.05或更小的每个值。我假设需要某种正则表达式来查找值,然后我可以将它们放入数组中,然后对它们进行排序 因此,找到这些值中的哪一个符合我的标准就是这样 int [] array; int arraysize; int lowvalue; int total; for(

我有一个大字符串,字符串中有一系列浮点。一个典型的字符串应该有
项目X$4.50项目描述\r\n\r\n项目Z$4.75…
文本实际上没有押韵或原因。我已经有了最低值,我需要找到字符串中的所有值。因此,如果它是
10.00
,它将找到
10.05
或更小的每个值。我假设需要某种正则表达式来查找值,然后我可以将它们放入数组中,然后对它们进行排序

因此,找到这些值中的哪一个符合我的标准就是这样

int [] array;
int arraysize;
int lowvalue;
int total;

for(int i = 0; i<arraysize; ++i)
{
    if(array[i] == lowvalue*1.05) ++total;
}
int[]数组;
内部阵列化;
int低值;
整数合计;
对于(int i=0;i但d+)而言,它实际上不适用于浮点。

您应该使用正则表达式:

Regex r = new RegEx("[0-9]+\.[0-9]+");
Match m = r.Match(myString);
诸如此类。然后您可以使用:

float f = float.Parse(m.value);
如果需要阵列:

MatchCollection mc = r.Matches(myString);
string[] myArray = new string[mc.Count];
mc.CopyTo(myArray, 0);
编辑

我刚刚为您创建了一个小示例应用程序Joe。我编译了它,它在我的机器上使用您的问题中的输入行运行良好。如果您有问题,请发布您的InputString,以便我可以试用。以下是我编写的代码:

static void Main(string[] args)
{
    const string InputString = "Item X $4.50 Description of item \r\n\r\n Item Z $4.75";

    var r = new Regex(@"[0-9]+\.[0-9]+");
    var mc = r.Matches(InputString);
    var matches = new Match[mc.Count];
    mc.CopyTo(matches, 0);

    var myFloats = new float[matches.Length];
    var ndx = 0;
    foreach (Match m in matches)
    {
        myFloats[ndx] = float.Parse(m.Value);
        ndx++;
    }

    foreach (float f in myFloats)
        Console.WriteLine(f.ToString());

    // myFloats should now have all your floating point values
}

需要澄清的是,您是否需要
10.00
下面的所有值,还是专门寻找最小值?@StriplingWarrior这是一个输入错误,所有值都必须是最低值的105%或更低。只有这些值,还是您需要这些值的描述?您无法将匹配项复制到字符串的集合。@svick-。它应该将MatchCollection项复制到一个数组中,然后您可以迭代该数组并利用Value属性获取字符串。这表示您可以复制到数组中。它并不是说您可以复制到字符串数组中。而且您的代码实际上不起作用,
CopyTo()
抛出
InvalidCastException
@IceManin这是一个非常奇怪的结果。它甚至是字符串的一部分。Joe-嗯,这很奇怪。我很快就把我的答案放在了一起。给我几分钟的时间,我会用我用你的问题输入字符串测试的答案重新编辑我的答案。