我正在尝试比较有时前面带有字符A-Z的字符串,以查看它是否存在于列表中。

因此比较225225.之类的东西,看看它是否存在于这样的值列表中

225.0
235.9
A23.8
B56.0
345.8


我的正则表达式在225.上失败(带有句点)。它应该与列表中的第一个匹配,因为它们是相同的数值。

if (codesList[i].IndexOf(".") < 0)
{
    code = new System.Text.RegularExpressions.Regex("\\b" + codesList[i].Replace(".", "[.]") + "(?![.])\\b");
}
else
{
    code = new System.Text.RegularExpressions.Regex("\\b" + codesList[i].Replace(".", "[.]") + "\\b");
}

if (code.IsMatch(stringToFind))
{
    found = true;
}


因此,尽管如此,我还是通过转换为十进制来使用精确的数值。但是,如果该值前面有一个字符,那是行不通的。

编辑->除了要查看字符串是否与列表中的字母数字值匹配之外,我不确定可以澄清多少。但是它必须在数值上匹配(暂时忽略字母字符),并且一旦匹配,字母字符必须完全匹配。

因此,A57.0应该与A57匹配。和A57
但是A57.01与A57不匹配。或A57,Z57也不会。

与常规数值相同
234.0必须等于234和234。

最佳答案

首先,您应该从要比较的字符串中删除所有非数字字符。

然后转换为数字并进行比较。

    bool found = false;

    foreach(var code in codesList)
    {
        Regex rgx = new Regex(@"[^0-9\-\.]");
        code = rgx.Replace(code, "");

        double num;

        if(double.TryParse(code, num))
        {
            // floating point number comparison should be done against a delta,
            // adjust as needed
            if(Math.Abs(num - numberToFind) < 0.000001d)
            {
                found = true;
                break;
            }
        }
    }

10-04 13:47