我们想验证提供的分隔符的输入.DAT文件记录。
在我们的.net应用程序中,我们可以根据提供的deliminator解析输入文件,其中所有的deliminator都是正确的, 例如:“测试”,“数据”,“CaseInforation”
上面的记录/行文件将成功解析,现在我们的行/记录有问题,格式如下:
“测试”,数据 “CaseInforation” (你可以看到没有文本限定符包含'data'值&因为这会在解析文件中的数据时产生问题。)
因此我们决定使用正则表达式来查找未被TextQualifier包围的有问题的值。
要解决此问题,我们在RegEx下创建了查找有问题的值, \ X2C([^ \ X22]。*?[^ \ X22])\ X2C
使用上面的正则表达式,它可以在第一个和第一个之间的记录中工作。最后的领域。
“测试”,数据,“CaseInforation” - >正则表达式成功解析此记录&提供数据作为输出字段有问题。
“测试”,“数据”,CaseInforation - >对于此记录,正则表达式与最后一个值不匹配。
任何人都可以帮助我们纠正与第一个或最后一个值匹配的正则表达式。
感谢。
答案 0 :(得分:3)
^(?:(?:"((?:""|[^"])+)"|([^,]*))(?:$|,))+$
将匹配整行,然后您可以使用match.Groups [1] .Captures来获取数据(不带引号)。另外,我让"My name is ""in quotes"""
成为有效的字符串。
string mystring = "\"Test\",\"data\",\"CaseInforation\"";
MatchCollection matches = Regex.Matches(mystring, "^(?:(?:\"((?:\"\"|[^\"])+)\"|([^,]*))(?:$|,))+$");
match[0].Value = "Test","data","CaseInforation"
match[0].Groups[0].Value => "Test","data","CaseInforation"
match[0].Groups[0].Captures[0].Value => "Test","data","CaseInforation"
match[0].Groups[1].Value => CaseInforation
match[0].Groups[1].Captures[0].Value => Test
match[0].Groups[1].Captures[1].Value => data
match[0].Groups[1].Captures[2].Value => CaseInforation
答案 1 :(得分:0)
这些方面的东西?
/^"\w+","?(.+)"?,"\w+"$/
答案 2 :(得分:0)
一个简单的[^\",]+
应该为每个值提供一个匹配,只要任何“和”在值之间。如果值内有任何值,那么该值将被分成两个。
这样的事情:
foreach(Match match in Regex.Matches(data, "[^\",]+"))
{
Console.WriteLine(match.Value);//or whatever
}
虽然如果你有"Test",data,"CaseIn"foration"
,你会得到Test,data,CaseIn和foration。