以下表达式应与美国电话号码匹配:
\(?\d{3}\)?-? *\d{3}-? *-?\d{4}
但是,当我在我的程序中使用它时会出现错误:
解析“(?\ d {3})? - ?* \ d {3} - ?* - ?\ d {4}” - 嵌套量词*。
我无法看到错误的位置。 :(
适用于regex101适用于:
(111) 111-1111
111-111-1111
1111111111
但在与C#Regex一起使用时似乎不起作用。
我感谢任何指导。 TIA
(C#VS2010 .NET 4.0)
编辑: 这解决了这个问题:
\(?\d{3}\)?-?\s*\d{3}-?\s*-?\d{4}
仍然不知道为什么会出现嵌套量词错误?
答案 0 :(得分:4)
第一个正则表达式的问题在于它包含使用RegexOptions.IgnorePatternWhitespace
选项时被忽略的文字空格。请参阅this demo,检查 Ignore Whitespace
选项以重现此问题。
你的第一个正则表达式等于
\(?\d{3}\)?-?*\d{3}-?*-?\d{4}
^ ^
要使此正则表达式正常工作,请不要使用RegexOptions.IgnorePatternWhitespace
选项,否则*
量词将应用于.NET正则表达式中不允许的?
量词。
或者使用[ ]
或\s
替换空格。 E.g。
\(?\d{3}\)?-?[ ]*\d{3}-?[ ]*-?\d{4}
使用RegexOptions.IgnorePatternWhitespace
标志时,不会忽略字符类中的空格(参见RegexOptions Enumeration MSDN page)。
请参阅demo
答案 1 :(得分:1)
也许这个?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Regex RegexObj = new Regex("\\(?\\d{3}-?\\)?\\s*\\d{3}-?\\s*-?\\d{4}");
String Str1 = "(111) 111-1111";
String Str2 = "111-111-1111";
String Str3 = "1111111111";
Console.Write(RegexObj.IsMatch(Str1).ToString() + '\n');
Console.Write(RegexObj.IsMatch(Str2).ToString() + '\n');
Console.Write(RegexObj.IsMatch(Str3).ToString() + '\n');
Console.Read();
}
}
}