Skip to main content
 首页 » 编程设计

c#之有没有不使用正则表达式来比较字母数字的简单方法

2024年01月13日37qq78292959

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

所以比较像 225 或 225. 这样的值,看看它是否存在于这样的值列表中

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; 
            } 
        }     
    }