如何只得到数字直到点?

How to get only numbers until the dot?

我只需要匹配此文本中 TOTAL SALES 之后的数字,它必须在第一个点处停止,并且必须避免任何特殊字符

想要的结果是800

更新:它适用于第一个,但如果有反引号则失败 Regex

TOTAL SALES � EUR � 800.0013�000.001�700TOTAL PURCHASEEUR90.007�500.00250.001�444.84
MARGIN EUR710.00

我做了这个但不知道如何继续:

(?<=TOTAL SALES)([^.]+)

有效,但与 EUR 和特殊字符匹配。

感谢任何帮助!谢谢

我真的不知道你为什么在这里使用正则表达式,我觉得它既不直接也不简洁。

您提供的字符串包含新段的标记 - 由于替换标记 () 可能不是它的实际值,您可能需要调整字符值:

        string test = "TOTAL SALES � EUR � 2'800.0013�000.001�700TOTAL PURCHASEEUR90.007�500.00250.001�444.84MARGIN EUR710.00";         
        string[] split = test.Split('\uFFFD');          
        double actualValue =  Convert.ToDouble(Regex.Replace(split[2],"[^0-9.]",""));
        Console.WriteLine(actualValue);;

输出:2800.0013 文化 en-us

通过这种方式,您还可以更轻松地使用适当的数据类型,在本例中为双精度数据类型。

鉴于此格式在这一点上是静态的,实际上依靠拆分数组的索引是合法的。

但是,如果您想要确保始终获得总销售额,或者掩码可能不总是静态的,您甚至可以使用简单的 substring / indexOf 组合:

        var start = test.IndexOf("TOTAL SALES");
        var dotIndex = test.IndexOf('.',start);
        
        for(int i = dotIndex; i >= 0; i--)
        {
            if(test[i].Equals(' '))
            {
                start = i+1;
                break;
            }
        }
        
        
        string stringValue = test.Substring(start,dotIndex-start);
        stringValue = Regex.Replace(stringValue,"[^0-9]","");
        Console.WriteLine(Convert.ToInt32(stringValue));

输出:2800.