我有正在使用的正则表达式的问题,但不知道如何继续使用它们.我收到错误"无法识别的转义序列".
我试图列出所有可能具有以下代码中列出的格式的电话号码的文件
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();
}
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.
Bli*_*ndy 72
使用@
使串不再使用转义字符\
:
string regexPattern1 = @"^(\d{3}\.){2}\d{4}$";
string regexPattern2 = @"^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$";
Run Code Online (Sandbox Code Playgroud)
作为旁注,我认为你希望最后的两个if
s 是两个条件之间if
带有或(||
)的单个.
小智 5
问题不在于正则表达式,而在于字符串。在通过调用 IsMatch() 将其编译为正则表达式之前,您输入的文本仍然是普通字符串,并且必须遵守语言规则。
\d 在您的语言中不是可识别的转义序列,因此会出现错误。您可以使用双反斜杠(\ 是获得 a 的转义序列),或者正如 Blindy 指出的那样,您可以在常量字符串前加上 @ 前缀,告诉编译器它不应该尝试解释任何看起来像转义序列的内容。
归档时间: |
|
查看次数: |
53828 次 |
最近记录: |