0

我正在寻找一种在.NET 可识别模式中的字符串中查找 Guid 的方法。

这个流行的库中提供了一些正则表达式,但我找不到适用于这篇MSDN 文章中列出的所有可能的 Guid 的一个。

例如,假设我有一个这样的字符串:

活动:“{0xCA761232, 0xED42, 0x11CE, {0xBA, 0xCD, 0x00, 0xAA, 0x00, 0x57, 0xB2, 0x23}}”,时间:09:09:09:09

这应该返回:

{0xCA761232, 0xED42, 0x11CE, {0xBA, 0xCD, 0x00, 0xAA, 0x00, 0x57, 0xB2, 0x23}}

另一个例子可能是:

随机串 CA761232-ED42-11CE-BACD-00AA0057B223 随机串

这应该返回:

CA761232-ED42-11CE-BACD-00AA0057B223

关于如何解决这个问题的任何想法?正则表达式是要走的路吗?

4

2 回答 2

3

解决方案是:

using System;
using System.Text.RegularExpressions;

class Program
{
  static void Main()
  {
    string input = "Random string CA761232-ED42-11CE-BACD-00AA0057B223 random string";
    Match match = Regex.Match(input,
      @"((?:(?:\s*\{*\s*(?:0x[\dA-F]+)\}*\,?)+)|(?<![a-f\d])[a-f\d]{32}(?![a-f\d])|" +
      @"(?:\{\(|)(?<![A-F\d])[A-F\d]{8}(?:\-[A-F\d]{4}){3}\-[A-F\d]{12}(?![A-F\d])(?:\}|\)|))");
    if (match.Success)
    {
      string key = match.Groups[1].Value;
      Console.WriteLine(key);
    }
    else
    {
      Console.WriteLine("NO MATCH");
    }
  }
}

在此处查看并测试此代码。

于 2012-06-28T19:41:27.273 回答
0

试试这个正则表达式:

(\{0x[0-9A-F]{8}, 0x[0-9A-F]{4}, 0x[0-9A-F]{4}, \{(?:0x[0-9A-F]{2}, ){7}0x[0-9A-F]{2}\}\})

证明:

于 2012-06-28T19:37:50.047 回答