C# 如何获取在搜索的术语后出现的逗号分隔值?

C# 如何获取在搜索的术语后出现的逗号分隔值?,c#,regex,parsing,csv,C#,Regex,Parsing,Csv,以下是我目前的代码: public void DeserialStream(string filePath) { using (StreamReader sr = new StreamReader(filePath)) { string currentline; while ((currentline = sr.ReadLine()) != null) {

以下是我目前的代码:

public void DeserialStream(string filePath)
    {
        using (StreamReader sr = new StreamReader(filePath))
        {
            string currentline;
            while ((currentline = sr.ReadLine()) != null)
            {
                if (currentline.IndexOf("Count", StringComparison.CurrentCultureIgnoreCase) >= 0)
                {
                    Console.WriteLine(currentline);
                }

            }
        }
    }
我想知道如何获取在我搜索的词之后出现的逗号分隔值

例如,如果我使用包含以下信息的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"
但是,我如何在计数之后但在净额之前获取值表呢

也就是说,只有括号中的数据是我想要解析的:

"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|Net)\"((?!\"DataType\").)*

这将使数据类型行始终与下一个数据类型行相匹配。

您可以使用如下正则表达式:

\"DataType\"\,\"(?:Count|Net)\"((?!\"DataType\").)*

这将使数据类型行始终与下一个数据类型行相匹配。

您可以使用如下正则表达式:

\"DataType\"\,\"(?:Count|Net)\"((?!\"DataType\").)*

这将使数据类型行始终与下一个数据类型行相匹配。

您可以使用如下正则表达式:

\"DataType\"\,\"(?:Count|Net)\"((?!\"DataType\").)*
这将使数据类型行始终与下一个数据类型行相匹配。

您可以使用LINQ:

List<string> lines = File.ReadLines(path)
   .SkipWhile(l => l.IndexOf("\"Count\"", StringComparison.InvariantCultureIgnoreCase) == -1)
   .Skip(1) // skip the "Count"-line
   .TakeWhile(l => l.IndexOf("\"Net\"",   StringComparison.InvariantCultureIgnoreCase) == -1)
   .ToList();
(感谢)

现在,您可以在上面的查询中使用
SelectMany
,以平展所有令牌:

List<string> allTokens = File.ReadLines(path)
    .SkipWhile(l => l.IndexOf("\"Count\"", StringComparison.InvariantCultureIgnoreCase) == -1)
    .Skip(1) // skip the "Count"-line
    .TakeWhile(l => l.IndexOf("\"Net\"", StringComparison.InvariantCultureIgnoreCase) == -1)
    .SelectMany(l => SplitCSV(l.Trim()))
    .ToList();
您可以使用LINQ:

List<string> lines = File.ReadLines(path)
   .SkipWhile(l => l.IndexOf("\"Count\"", StringComparison.InvariantCultureIgnoreCase) == -1)
   .Skip(1) // skip the "Count"-line
   .TakeWhile(l => l.IndexOf("\"Net\"",   StringComparison.InvariantCultureIgnoreCase) == -1)
   .ToList();
(感谢)

现在,您可以在上面的查询中使用
SelectMany
,以平展所有令牌:

List<string> allTokens = File.ReadLines(path)
    .SkipWhile(l => l.IndexOf("\"Count\"", StringComparison.InvariantCultureIgnoreCase) == -1)
    .Skip(1) // skip the "Count"-line
    .TakeWhile(l => l.IndexOf("\"Net\"", StringComparison.InvariantCultureIgnoreCase) == -1)
    .SelectMany(l => SplitCSV(l.Trim()))
    .ToList();
您可以使用LINQ:

List<string> lines = File.ReadLines(path)
   .SkipWhile(l => l.IndexOf("\"Count\"", StringComparison.InvariantCultureIgnoreCase) == -1)
   .Skip(1) // skip the "Count"-line
   .TakeWhile(l => l.IndexOf("\"Net\"",   StringComparison.InvariantCultureIgnoreCase) == -1)
   .ToList();
(感谢)

现在,您可以在上面的查询中使用
SelectMany
,以平展所有令牌:

List<string> allTokens = File.ReadLines(path)
    .SkipWhile(l => l.IndexOf("\"Count\"", StringComparison.InvariantCultureIgnoreCase) == -1)
    .Skip(1) // skip the "Count"-line
    .TakeWhile(l => l.IndexOf("\"Net\"", StringComparison.InvariantCultureIgnoreCase) == -1)
    .SelectMany(l => SplitCSV(l.Trim()))
    .ToList();
您可以使用LINQ:

List<string> lines = File.ReadLines(path)
   .SkipWhile(l => l.IndexOf("\"Count\"", StringComparison.InvariantCultureIgnoreCase) == -1)
   .Skip(1) // skip the "Count"-line
   .TakeWhile(l => l.IndexOf("\"Net\"",   StringComparison.InvariantCultureIgnoreCase) == -1)
   .ToList();
(感谢)

现在,您可以在上面的查询中使用
SelectMany
,以平展所有令牌:

List<string> allTokens = File.ReadLines(path)
    .SkipWhile(l => l.IndexOf("\"Count\"", StringComparison.InvariantCultureIgnoreCase) == -1)
    .Skip(1) // skip the "Count"-line
    .TakeWhile(l => l.IndexOf("\"Net\"", StringComparison.InvariantCultureIgnoreCase) == -1)
    .SelectMany(l => SplitCSV(l.Trim()))
    .ToList();


您需要提供有关如何格式化CSV的更多信息。如果你想使用正则表达式,你需要提供正则表达式必须找到的所有可能的模式。现在,您希望如何捕获逗号分隔列表中的值?从
Split()
生成的简单字符串[]会起作用吗?我如何自定义Split(),以便只捕获计数后出现的文本,但在另一个类似文本字段之前,在上面的示例DateType,Net之前?您需要提供有关如何格式化CSV的更多信息。如果你想使用正则表达式,你需要提供正则表达式必须找到的所有可能的模式。现在,您希望如何捕获逗号分隔列表中的值?从
Split()
生成的简单字符串[]会起作用吗?我如何自定义Split(),以便只捕获计数后出现的文本,但在另一个类似文本字段之前,在上面的示例DateType,Net之前?您需要提供有关如何格式化CSV的更多信息。如果你想使用正则表达式,你需要提供正则表达式必须找到的所有可能的模式。现在,您希望如何捕获逗号分隔列表中的值?从
Split()
生成的简单字符串[]会起作用吗?我如何自定义Split(),以便只捕获计数后出现的文本,但在另一个类似文本字段之前,在上面的示例DateType,Net之前?您需要提供有关如何格式化CSV的更多信息。如果你想使用正则表达式,你需要提供正则表达式必须找到的所有可能的模式。现在,您希望如何捕获逗号分隔列表中的值?从
Split()
生成的简单字符串[]会起作用吗?我如何自定义Split(),以便只捕获计数后出现的文本,但在另一个类似的文本字段之前,在上面的DateType,Net之前的示例中?这会起作用,问题是我有一个包含多个数据类型的csv文件。。。。数据类型A、B、C、D、E等,。。。。我只需要从数据类型C到D的信息。在上面的例子中,我想指定正则表达式包含Count和Net,因为它们是唯一唯一的标识符。顺便说一句,如果我有上面相同的CSV格式,但有21X23的数据网格,正则表达式会改变吗?正则表达式最重要的是文本的格式。只要正则表达式匹配的模式没有改变,网格是否改变也没关系。如果是的话,我建议你创建一个新问题。顺便说一句,我有一个小问题,如果我想使用上面的正则表达式,我会这样写:var countRegex=newregex(“\”数据类型\“,\”(?:Count | Net)\”((?!\”数据类型\“)*”;然而,在我的Visual Studio中,它告诉我逗号是无法识别的转义序列?如何解决这个问题?请尝试在字符串前面加一个@:
var countRegex=new Regex(@“\”DataType\”,\“(?:Count | Net)\”(((?!\”DataType\)*”)那会有用的,问题是我有一个包含多个数据类型的csv文件。。。。数据类型A、B、C、D、E等,。。。。我只需要从数据类型C到D的信息。在上面的例子中,我想指定正则表达式包含Count和Net,因为它们是唯一唯一的标识符。顺便说一句,如果我有上面相同的CSV格式,但有21X23的数据网格,正则表达式会改变吗?正则表达式最重要的是文本的格式。只要正则表达式匹配的模式没有改变,网格是否改变也没关系。如果是的话,我建议你创建一个新问题。顺便说一句,我有一个小问题,如果我想使用上面的正则表达式,我会这样写:var countRegex=newregex(“\”数据类型\“,\”(?:Count | Net)\”((?!\”数据类型\“)*”;然而,在我的Visual Studio中,它告诉我逗号是无法识别的转义序列?如何解决这个问题?请尝试在字符串前面加一个@:
var countRegex=new Regex(@“\”DataType\”,\“(?:Count | Net)\”(((?!\”DataType\)*”)那会有用的,问题是我有一个包含多个数据类型的csv文件。。。。数据类型A、B、C、D、E等,。。。。我只需要从数据类型C到D的信息。在上面的例子中,我想指定正则表达式包含Count和Net,因为它们是唯一唯一的标识符。顺便说一句,我还有一个问题,如果我有上面相同的CSV格式,但是有21X23的数据网格,正则表达式会改变吗?正则表达式的重要之处是f