C# Regex返回术语,而不是术语之间的信息

C# Regex返回术语,而不是术语之间的信息,c#,regex,csv,C#,Regex,Csv,这是我的密码: public void DeserialStream(string filePath) { using (StreamReader sr = new StreamReader(filePath)) { string currentline; Regex countRegex = new Regex("\"DataType\",\"(?:Count|Net)\"((?!\"DataType\")

这是我的密码:

public void DeserialStream(string filePath)
    {
        using (StreamReader sr = new StreamReader(filePath))
        {
            string currentline;
            Regex countRegex = new Regex("\"DataType\",\"(?:Count|Net)\"((?!\"DataType\").)*", RegexOptions.Singleline); 
            while ((currentline = sr.ReadLine()) != null)
            {
                    foreach (Match match in countRegex.Matches(currentline))
                    {
                        Console.WriteLine(match.Value); 
                    }
                }

            }
        }
以下是我的CSV:

"Date","dd/mm/yyyy"
"ExpirationDate","dd/mm/yyyy"

"DataType","Count"
"Location","Unknown","Variable1","Variable2","Variable3"
"A(Loc3, Loc4)","Unknown","5656","787","42"
"A(Loc5, Loc6)","Unknown","25","878","921"

"DataType","Net"
"Location","Unknown","Variable1","Variable2","Variable3"
"A(Loc3, Loc4)","Unknown","5656","787","42"
"A(Loc5, Loc6)","Unknown","25","878","921"

我想返回下面“数据类型”、“计数”和“数据类型”、“网络”之间的数据。但是,我的编译器返回的是术语:“数据类型”、“计数”和“数据类型”、“网络”,而不是介于两者之间的数据。我不确定我做错了什么

您需要从数据类型中删除:

编辑: 尝试此正则表达式“\”数据类型“,\”(?:Count | Net)\”((?:(?!\”数据类型“)*)”

,但您可能需要调整:

\"DataType\",\"(?:Count|Net)\"\n((((?<Location>\"[^\"]*\"),(?<Unknown>\"[^\"]*\"),(?<Var1>\"[^\"]*\"),(?<Var2>\"[^\"]*\"),(?<Var3>\"[^\"]*\"))\n)*)
\“数据类型\”,\”(?:Count | Net)\”\n(((((?\“[^\”]*\”),(?\“[^\”]*\”,(?\“[^\”]*\”,(?\“[^\”]*\”),((?\“[^\”]*\”)))n)*)
    请注意,它不支持正确的CSV解析(在值中间不能处理转义<代码> )。
  • 请记住,它不允许逗号之间有空格
  • 它假定在数据行之后和下一个标题行之前有一个空行
  • 任何可能被遗漏的内容:)-相应地进行调整(即,它可能有额外的捕获组,因此您可能需要对此进行调整)。这与其说是一个完美的解决方案,不如说是为了让你继续前进

我认为这种模式将执行
\'DataType\'、\'Count\'(.**?\'DataType\'、\'Net\'
w/
s
选项

可能的重复项您是要匹配标题行,还是要匹配标题行下方的实际数据行?我相信,您的正则表达式将匹配标题行,而不是数据行……我正在尝试匹配Count下面但Net上面的实际数据行。不是标题…尽管我删除了,但上面的问题仍然是一样的:。我认为你给我的正则表达式是错误的。我不想要标题,我想要标题之间的数据。我有个问题。。。由于Regex看起来比最初更痛苦,除了Regex之外,还有什么方法可以获取我想要的数据吗?是的,通过使用任何合适的CSV解析器。事实上,这将是一种更可取的方式。你可以在上找到这样的帖子,但似乎对Rubular不起作用。不知道为什么。。。如何在上面的正则表达式中包含s修饰符?请改用此
“数据类型”、“计数”([\s\s]*?)“数据类型”、“网络”