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

标签 c# .net

我正在尝试比较有时前面有字符 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;
            }
        }    
    }

关于c# - 有没有不使用正则表达式来比较字母数字的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25791880/

相关文章:

c# - 如何针对 WPF 编写 specflow

c# - IEnumerable<IEnumerable<T>> 到 IEnumerable<T> 使用 LINQ

c# - MVC 4 Entity Framework 模型为空

c# - 在 post 请求 asp.net mvc 中更改模型属性

.net - 如何调试: Multiple assemblies with equivalent identity have been imported?

c# - 通用 EventArgs 类未显示在 WinForms 设计器的属性网格上

c# - 与google prediction API 具有相似功能的.Net 库

c# - 列表与字典(最大尺寸、元素数量)

.net - WPF MVVM设置控制焦点

java - android/Windows 应用程序 viber(聊天示例)