C# “可选”之前结束的正则表达式--&引用;或\s

C# “可选”之前结束的正则表达式--&引用;或\s,c#,regex,C#,Regex,我想弄清楚,如何从文本中抓取两组,如: ---MyValue=4497-DD616-1134-34---\r\n 我想捕获“MyValue”和“4497-DD616-1134-34”。可接受任何字符,但\s字符(\r\n、空格等)和“-”字符至少同时重复2次除外。 我现在的正则表达式: (?<Attribute>[^-\s\r\n]+)=(?<Value>[^-\s\r\n]+) 因此“----”、“\r”、“\n”等字符是可选的。 我在C#中使用正则表达式。 链

我想弄清楚,如何从文本中抓取两组,如:

---MyValue=4497-DD616-1134-34---\r\n 
我想捕获“MyValue”和“4497-DD616-1134-34”。可接受任何字符,但\s字符(\r\n、空格等)和“-”字符至少同时重复2次除外。 我现在的正则表达式:

(?<Attribute>[^-\s\r\n]+)=(?<Value>[^-\s\r\n]+)
因此“----”、“\r”、“\n”等字符是可选的。 我在C#中使用正则表达式。

链接到正则表达式:


有什么想法吗?

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

(\w+)=(.*?)(?:\s|--)

另一方面,如果结尾
--
是可选的,并且文本
\r
\n
也是可选的,那么您可以使用这个正则表达式:

(\w+)=(.*?)(?:\s|--|\\r|\\n)

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

(\w+)=(.*?)(?:\s|--)

另一方面,如果结尾
--
是可选的,并且文本
\r
\n
也是可选的,那么您可以使用这个正则表达式:

(\w+)=(.*?)(?:\s|--|\\r|\\n)

使用

(?<Attribute>\w+)=(?<Value>(?:(?!-{3})\S)+)

详细信息

  • (?)

    使用

    详细信息

    • (?)


      显示表达式实际捕获内容的示例。
      (\w+)=(\w+-\w+-\w+-\w+-\w+)
      ?捕获组1:
      MyValue
      ,捕获组2:
      4497-DD616-1134-34
      您使用的是什么语言?正则表达式有不同的风格相应地编辑您的问题和标记。OP,请提供一个指向您在图像中显示的正则表达式的链接。显示您的表达式实际捕获的示例。
      (\w+)=(\w+-\w+-\w+-\w+)
      ?捕获组1:
      MyValue
      ,捕获组2:
      4497-DD616-1134-34
      您使用的是什么语言?正则表达式有不同的风格。如果您的问题和相应的标记。OP,请提供一个指向图像中显示的正则表达式的链接。
      var pat = @"(?<Attribute>\w+)=(?<Value>(?:(?!-{3})\S)+)";
      var s = "---MyValue=4497-DD616-1134-34---\r\n---MyNum=72 MyPercent=17% --- ";
      var res = Regex.Matches(s, pat)
          .Cast<Match>()
          .ToDictionary(
              m => m.Groups["Attribute"].Value,
              m => m.Groups["Value"].Value
          );
      foreach (var kvp in res)
      {
          Console.WriteLine("[{0}, {1}]", kvp.Key, kvp.Value);
      }
      
      [MyValue, 4497-DD616-1134-34]
      [MyNum, 72]
      [MyPercent, 17%]