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