我使用了Regex字符串:
versionPattern = @"^\d+(.\d+){3}$"
检查带有4个数字的字符串格式的连字符是.
xxx.xxx.xxx.xxx or x.x.x.x ...
但它使用string返回true:
1.0.0.123
并使用字符串返回false:
1.0.0.4
我的代码:
if (Regex.IsMatch(svnShopLoorTable.Rows[i].ItemArray[2].ToString(), versionPattern))
{
//MessageBox.Show("OK");
}
else
{
//MessageBox.Show("Should be: x.x.x.x");
s += "\r\nProgram " + svnShopLoorTable.Rows[i].ItemArray[1].ToString() + " of SHOPFLOOR has wrong version format: "
+ svnShopLoorTable.Rows[i].ItemArray[2].ToString() + " should be formated as: " + "x.x.x.x";
Console.WriteLine(s);
}
当svnShopLoorTable.Rows[i].ItemArray[1].ToString()
为1.0.0.123
时,它就可以了,不显示s
。但是当svnShopLoorTable.Rows[i].ItemArray[1].ToString()
为1.0.0.4
时,它会在控制台中显示日志:
SHOPFLOOR的程序设置表格版本格式错误:1.0.0.4 应格式化为:x.x.x.x
我不知道为什么会出现这个问题。请帮我解释一下并解决这个问题。感谢任何帮助!
答案 0 :(得分:1)
我会猜测并假设你的正则表达式无效之前或之后有一些空格。
当该行包含该行且仅包含该模式时,您的正则表达式有效。
确保在#34; 1.0.0.4"之前或之后没有任何空格,或者修改你的正则表达式不那么严格:
versionPattern = @"\d+(.\d+){3}"
或处理空白:
versionPattern = @"^\s*\d+(.\d+){3}\s*$"
此外,您应该在点("。")之前添加反斜杠(" \"),因为该点与正则表达式中的任何字符匹配。
这意味着:
^\d+(.\d+){3}$
也会匹配这个:
1a2b3c4
但这不会:
^\d+(\.\d+){3}$
只有插入的角色是实际的点才会起作用。
编辑:现在,我看到你的代码,我意识到你也可能只是因为我没有错而得到一个修剪。
svnShopLoorTable.Rows[i].ItemArray[1].ToString().Trim()