1

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

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,与 比较时返回 true 555-555-5555。我也有一个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自己解决这个问题。根据我迄今为止的研究, () 导致了这个问题。我相信它是因为 () 用于正则表达式而破折号不是。所以,破折号不会搞砸任何事情。我的问题是如何更改代码以满足我的需要?如何在没有问题的情况下获得代码中的 ()?

4

2 回答 2

4

\(用and转义括号\)

private static readonly Regex phoneNumber = new Regex(@"\(\d{3}\)\d{3}-\d{4}");
于 2013-01-02T20:35:39.840 回答
3

"(" 对于正则表达式是特殊的。如果您要匹配文字括号,请确保它前面有一个反斜杠。

于 2013-01-02T20:35:53.070 回答