【问题标题】:Extract the word between the quotes and store the values in an variable提取引号之间的单词并将值存储在变量中
【发布时间】:2013-02-15 21:47:02
【问题描述】:

我需要提取引号之间的单词并将值存储在变量中。

我的实际字符串将是

m:'液体'n:'4'

来自上面的字符串。我需要提取

单词liquid & 4

并像这样存储

var m = "liquid";
var n = "4";

如何在 c# 的正则表达式中做到这一点

【问题讨论】:

    标签: c# regex linq


    【解决方案1】:

    好吧,如果格式总是这样,那么您可以按: 拆分,并知道您将拥有一个以您想要的元素开头的字符串数组,介于' 字符之间。

    【讨论】:

      【解决方案2】:

      当你用“linq”标记你的问题时,你可以试试这个:

      var str = @"m:'liquid' n:'4'";
      var r = str.Split(new [] {'\''}).Where((s, i) => i % 2 == 1).ToArray();
      var m = r[0];
      var n = r[1];
      

      【讨论】:

        【解决方案3】:
        Regex regex = new Regex("(?<=')\\w+(?<!')");
        var matches = regex.Matches("m:'liquid' n:'4'");
        

        将匹配任何以 ' 开头并后跟 ' 的单词。

        var m = matches[0];
        var n = matches[1];
        

        【讨论】:

          【解决方案4】:

          这是一个通用的解决方案

          public Dictionary<string, string> GetValues(string input)
          {
              var results = new Dictionary<string, string>();
              var pairs = input.Split(" ");
              foreach(var pair in pairs)
              {
                  var parts = pair.Split(":");
                  results.Add(parts[0], parts[1].Trim("'"));
              }
              return results;
          }
          
          var str = "m:'liquid' n:'4'";
          var values = GetValues(str);
          var m = values["m"];
          var n = values["n"];
          

          【讨论】:

            【解决方案5】:
               var s = "m:'liquid' n:'4'";
               var ss = s.Split(new char[]{' ', ':'}, StringSplitOptions.RemoveEmptyEntries);
            

            您将在 ss 中找到这些对:{"m", "'liquid'", "n", "'4'"}。如果有空值(''),它就可以工作。

            【讨论】:

              【解决方案6】:

              您实际上可以使用 .indexOf 字符串

              var x = "m:'liquid' n:'4'";
              var split = x.Split(' ');
              var indexm0 = split[0].IndexOf("'");
              var indexm1 = split[0].LastIndexOf("'");
              
              var m = split[0].Substring(indexm0, indexm1 - 1);
              
              var indexn0 = split[1].IndexOf("'");
              var indexn1 = split[1].LastIndexOf("'");
              var n = split[1].Substring(indexn0, indexn1 - 1);
              

              【讨论】:

              • -1 如果他已经知道值是“液体”或“4”,那么从字符串中提取它没有任何意义。
              • @juharr 如果你不介意的话。您对接受的答案或其他答案有何看法或理解?
              • 我对已接受答案的看法是,它将适用于此处提到的特定情况以及其他可能性,使其成为更灵活的解决方案。
              • 在我更新的答案中..您对@juharr先生的理解是什么?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-10-21
              • 2017-11-18
              • 2022-01-25
              • 1970-01-01
              相关资源
              最近更新 更多