为什么Regex.Ismatch返回失败

时间:2015-09-25 03:02:10

标签: c# regex string

我使用了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

我不知道为什么会出现这个问题。请帮我解释一下并解决这个问题。感谢任何帮助!

1 个答案:

答案 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()