在字符串中查找.NET可识别的Guids

时间:2012-06-28 19:29:02

标签: c# .net regex guid

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

popular library中提供了一些正则表达式,但我找不到适用于此MSDN article中此处列出的所有可能指南的正则表达式。

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

  

ACTIVITY:“{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

有关如何处理此问题的任何想法?正则表达式是否可以到达这里?

2 个答案:

答案 0 :(得分: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");
    }
  }
}

查看并测试此代码here

答案 1 :(得分: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}\}\})

证明: