【问题标题】:Pattern Matching c#模式匹配 c#
【发布时间】:2012-12-17 20:58:38
【问题描述】:

假设我有一个文本文件,其中包含以下行。我想通过匹配(“和”)来获取引号中的两个值,这样我就可以检索 ABC 和 DEF 并将它们放在字符串列表或其他东西中,这样做的最佳方法是什么?好烦啊

如果EXAMPLEA(“ABC”)和EXAMPLEB(“DEF”)

【问题讨论】:

  • 您尝试过什么吗?我不这么认为。请阅读faqHow to Ask
  • 可能的字符串是否有任何复杂的变体?是否有任何转义机制(例如允许" 字符出现在字符串中)?
  • 您在标签中提到了正则表达式 - 这是一个好方法,试试吧!
  • 请向我们展示至少一点点努力。 It's so annoying 告诉我你甚至没有尝试这样做。
  • 你的问题已经解决了..你不接受答案!你可以通过检查答案旁边的正确标记来接受答案

标签: c# regex pattern-matching


【解决方案1】:

假设双引号之间的值不能包含转义的双引号的情况可能如下:

 var text = "If EXAMPLEA(\"ABC\") AND EXAMPLEB(\"DEF\")";
 Regex pattern = new Regex("\"[^\"]*\"");

 foreach (Match match in pattern.Matches(text))
 {
     Console.WriteLine(match.Value.Trim('"'));
 }

但这只是您可以做到的众多方法之一,也许不是最聪明的方法。自己试试吧!

【讨论】:

    【解决方案2】:

    最好的方法...

    List<string> matches=Regex.Matches(File.ReadAllText(yourPath),"(?<="")[^""]*(?="")")
                              .Cast<Match>()
                              .Select(x=>x.Value)
                              .ToList();
    

    【讨论】:

      【解决方案3】:

      这个模式应该可以解决问题:

      \"([^"]*)\"

              string str = "If EXAMPLEA(\"ABC\") AND EXAMPLEB(\"DEF\")";
              MatchCollection matched = Regex.Matches(str, @"\""([^\""]*)\""");
              foreach (Match match in matched)
              {
                  Console.WriteLine(match.Groups[1].Value);
              }
      

      请注意,引号在实际代码中是双引号,以便对其进行转义。并且代码引用组 [1] 来获取括号内的部分。

      【讨论】:

        【解决方案4】:
        IEnumerable<string> matches =
            from Match match
            in Regex.Matches(File.ReadAllText(filepath), @"\""([^\""]*)\""")
            select match.Groups[1].Value;
        

        其他人已经发布了一些答案,但我考虑到您在示例中只需要 ABCDEF,不带引号并将其保存在 IEnumerable&lt;string&gt; 中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-12
          • 2020-12-04
          • 2011-09-08
          • 2017-09-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多