使用Regex检查字符串的格式是否匹配所需的格式

时间:2013-01-02 20:32:22

标签: c# regex string visual-studio-2010

我正在尝试编写将采用给定字符串并将其与特定格式进行比较的代码。 这就是我正在使用的:

private static readonly Regex phoneNumber = new Regex(@"\d{3}-\d{3}-\d{4}");

public static bool VerifyPhoneNumber(string pNumber)
{
    return phoneNumber.IsMatch(pNumber);
}

格式为000-000-0000,将其与555-555-5555进行比较时返回true。我还有MessageBox显示pNumberphoneNumber用于比较。消息框显示:pNumber = 555-555-5555phoneNumber = \d{3}-\d{3}\d{4}

但这不是我想要的格式。我想使用这种格式(000)000-0000。为了使用这种格式,我将phoneNumber更改为:

private static readonly Regex phoneNumber = new Regex("(" + @"\d{3}" +  ")" + @"\d{3}-\d{4}");

但是当我运行此代码并将(555)555-5555与它进行比较时,它会返回false。 MessageBox显示pNumber = (555)555-5555phoneNumber = (\d{3})\d{3}-\d{4}

现在我还不了解Regex我自己要解决这个问题。根据我迄今为止的研究,()导致了这个问题。我相信它的因为()用于正则表达式而破折号不用。因此,破折号不会弄乱任何东西。我的问题是如何更改我的代码以满足我的需求?如何在没有问题的情况下获得代码中的()?

2 个答案:

答案 0 :(得分:4)

使用\(\)转义括号。

private static readonly Regex phoneNumber = new Regex(@"\(\d{3}\)\d{3}-\d{4}");

答案 1 :(得分:3)

“(”对于正则表达式是特殊的。如果你想要与文字括号匹配,请确保它前面有反斜杠。