我正在尝试比较有时前面有字符 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;
}
}
}
关于c# - 有没有不使用正则表达式来比较字母数字的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25791880/