Regex返回项,而不是项之间的信息

本文关键字:之间 信息 返回 Regex | 更新日期: 2023-09-27 18:04:21

我的代码:

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"

我想返回下面"DataType","Count"answers"DataType","Net"之间的数据。然而,我的编译器返回术语:"数据类型","计数"answers"数据类型","网络",而不是介于两者之间的数据。我不确定我做错了什么?

Regex返回项,而不是项之间的信息

您需要从DataType:

中删除:

编辑:试试这个正则表达式"'"数据类型'",'"(?:|净计数 )'"((?:(?!'" 数据类型'")。)*)"

这可能是您正在寻找的,尽管您可能需要调整:

'"DataType'",'"(?:Count|Net)'"'n((((?<Location>'"[^'"]*'"),(?<Unknown>'"[^'"]*'"),(?<Var1>'"[^'"]*'"),(?<Var2>'"[^'"]*'"),(?<Var3>'"[^'"]*'"))'n)*)
  • 请记住,它不支持正确的CSV解析(将不处理在值中间转义的")。
  • 请记住,逗号之间不允许有空格
  • 它假设在数据行之后和下一个标题行之前有一个空白行。
  • 任何其他可能被遗漏:)-相应地调整(即它可能有额外的捕获组,所以你可能需要调整)。这不是一个完美的解决方案,而是为了让你继续前进。

我认为这个模式将做'"DataType'",'"Count'"(.*?)'"DataType'",'"Net'" w/s选项
演示