好的,我放弃了——是时候向正则表达式专家寻求帮助了。
我正在尝试验证 CSV 文件内容,只是想看看它是否看起来像预期的有效 CSV 数据。我不是要验证所有可能的 CSV 表单,只是它“看起来像”CSV 数据,而不是二进制数据、代码文件或其他任何东西。
每行数据由逗号分隔的单词组成,每个单词包含a-z
,0-9
和少量标点字符,即-
和_
。文件中可能有几行。而已。
这是我的简单代码:
const string dataWord = @"[a-z0-9_\-]+";
const string dataLine = "("+dataWord+@"\s*,\s*)*"+dataWord;
const string csvDataFormat = "("+dataLine+") | (("+dataLine+@"\r\n)*"+dataLine +")";
Regex validCSVDataPattern = new Regex(csvDataFormat, RegexOptions.IgnoreCase);
protected override bool IsCorrectDataFormat(string fileContents)
{
return validCSVDataPattern.IsMatch(fileContents);
}
这给了我一个正则表达式模式
(([a-z0-9_\-]+\s*,\s*)*[a-z0-9_\-]+) | ((([a-z0-9_\-]+\s*,\s*)*[a-z0-9_\-]+\r\n)*([a-z0-9_\-]+\s*,\s*)*[a-z0-9_\-]+)
但是,如果我用一块 C# 代码来呈现它,正则表达式解析器会说它是匹配的。那个怎么样?C# 代码看起来一点也不像我的 CSV 模式(它有除_
and之外-
的标点符号,首先)。
谁能指出我明显的错误?让我再说一遍——我不是要验证所有可能的 CSV 表单,只是我的简单子集。