C#Regex Issue”;无法识别的转义序列”;
本文关键字:转义序列 识别 Issue C#Regex | 更新日期: 2023-09-27 17:57:46
我使用的正则表达式有问题,但不知道如何继续使用它们。我得到错误"无法识别的转义序列"。
我正在尝试列出所有可能有电话号码的文件,格式如下代码所列
static void Main(string[] args)
{
//string pattern1 = "xxx-xxx-xxxx";
//string pattern2 = "xxx.xxx.xxxx";
//string pattern3 = "(xxx) xxx-xxxx";
string[] fileEntries = Directory.GetFiles(@"C:'BTISTestDir");
foreach (string filename in fileEntries)
{
StreamReader reader = new StreamReader(filename);
string content = reader.ReadToEnd();
reader.Close();
string regexPattern1 = "^('d{3}'.){2}'d{4}$";
string regexPattern2 = "^(('('d{3}') ?)|('d{3}-))?'d{3}-'d{4}$";
if(Regex.IsMatch(content, regexPattern1))
Console.WriteLine("File found: " + filename);
if(Regex.IsMatch(content, regexPattern2))
Console.WriteLine("File found: " + filename);
}
Console.WriteLine(Environment.NewLine + "Finished");
Console.ReadLine();
}
非常感谢您的帮助。
使用@
使字符串不再使用转义符'
:
string regexPattern1 = @"^('d{3}'.){2}'d{4}$";
string regexPattern2 = @"^(('('d{3}') ?)|('d{3}-))?'d{3}-'d{4}$";
顺便说一句,我认为您希望末尾的两个if
是单个if
,在这两个条件之间有一个或(||
)。
添加一个额外的''''来取消转义。当它被处理时,它将按照您想要的方式进行解释。
问题不在于正则表达式,而在于字符串。在通过调用IsMatch()将其编译为正则表达式之前,您输入的文本仍然是一个普通字符串,并且必须遵守语言规则。
''您的语言中的d不是可识别的转义序列,因此出现错误。您可以使用双反斜杠(''是获取a的转义序列),或者,正如Blindy所指出的,您可以在常量字符串前面加上@,告诉编译器不应该试图将任何看起来像转义序列的东西解释为它。