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 に答える