Regex C # pour Guid

Je dois parsingr une chaîne et append des guillemets simples autour de chaque valeur Guid. Je pensais pouvoir utiliser une regex pour faire cela mais je ne suis pas exactement un gourou de regex.

Existe-t-il un bon Regex à utiliser pour identifier un Guid?

Ma deuxième question est une fois que j’ai trouvé une regex valide, je suppose que j’utiliserais Regex.Replace(Ssortingng, Ssortingng, MatchEvaluator) mais je ne suis pas tout à fait sûr de la syntaxe. Peut-être que quelque chose comme:

 return Regex.Replace(ssortingngToFindMatch, GuidRegex, match => { return ssortingng.Format("'{0}'", match.Groups[0].ToSsortingng()); }); 

Une chaîne que j’essaie d’parsingr peut ressembler à ceci:

“SELECT passwordco0_.PASSWORD_CONFIG_ID comme PASSWORD1_46_0_, FROM PASSWORD_CONFIG passwordco0_ WHERE passwordco0_.PASSWORD_CONFIG_ID = baf04077-a3c0-454b-ac6f-9fec00b8e170; @ p0 = baf04077-a3c0-454b-ac6f-9fec00b8e170 [Type: Guid (0)]”

Celui-ci est assez simple et ne nécessite pas de délégué comme vous le dites.

 resultSsortingng = Regex.Replace(subjectSsortingng, @"^[{(]?[0-9A-F]{8}[-]?([0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$", "'$0'", RegexOptions.IgnoreCase); 

Cela correspond aux styles suivants, qui sont tous des formats équivalents et acceptables pour un GUID.

 "ca761232ed4211cebacd00aa0057b223" "CA761232-ED42-11CE-BACD-00AA0057B223" "{CA761232-ED42-11CE-BACD-00AA0057B223}" "(CA761232-ED42-11CE-BACD-00AA0057B223)" 

Mise à jour 1

@NonStatic souligne dans les commentaires que l’expression régulière ci-dessus correspond à des faux positifs qui ont un délimiteur de fermeture incorrect.

Cela peut être évité par les conditions rationnelles qui sont largement sockets en charge.

Les conditions sont supscopes par le moteur JGsoft, Perl, PCRE, Python et le framework .NET. Ruby les prend en charge à partir de la version 2.0. Des langages tels que Delphi, PHP et R, dotés de fonctionnalités regex basées sur PCRE, prennent également en charge les conditions. (source http://www.regular-expressions.info/conditional.html )

La regex qui suit correspondra

 {123} (123) 123 

Et ne correspondra pas

 {123) (123} {123 (123 123} 123) 

Regex:

 ^({)?(\()?\d+(?(1)})(?(2)\))$ 

Les solutions sont simplifiées pour ne faire correspondre que des chiffres afin de montrer de manière plus claire ce qui est requirejs si nécessaire.

La plupart des regex de base suivent:

 (^([0-9A-Fa-f]{8}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{12})$) 

ou vous pouvez le coller ici .

J’espère que cela vous fera gagner du temps.

Vous pouvez facilement générer automatiquement le code C # en utilisant: http://regexhero.net/tester/ .

C’est gratuit.

Voici comment je l’ai fait:

entrer la description de l'image ici

Le site génère ensuite automatiquement le code .NET:

 ssortingng strRegex = @"\b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-F0-9]{12}\b"; Regex myRegex = new Regex(strRegex, RegexOptions.None); ssortingng strTargetSsortingng = @" {CD73FAD2-E226-4715-B6FA-14EDF0764162}.Debug|x64.ActiveCfg = Debug|x64"; ssortingng strReplace = @"""$0"""; return myRegex.Replace(strTargetSsortingng, strReplace); 

Dans .NET Framework 4, il existe une structure System.Guid améliorée, qui inclut les nouvelles méthodes TryParse et TryParseExact pour parsingr le GUID. Voici un exemple pour cela.

  //Generate New GUID Guid objGuid = Guid.NewGuid(); //Take invalid guid format ssortingng strGUID = "aaa-aaaa"; Guid newGuid; if (Guid.TryParse(objGuid.ToSsortingng(), out newGuid) == true) { Response.Write(ssortingng.Format("
{0} is Valid GUID.", objGuid.ToSsortingng())); } else { Response.Write(ssortingng.Format("
{0} is InValid GUID.", objGuid.ToSsortingng())); } Guid newTmpGuid; if (Guid.TryParse(strGUID, out newTmpGuid) == true) { Response.Write(ssortingng.Format("
{0} is Valid GUID.", strGUID)); } else { Response.Write(ssortingng.Format("
{0} is InValid GUID.", strGUID)); }

Dans cet exemple, nous créons un nouvel object guid et prenons également une variable de chaîne qui a un guid invalide. Après cela, nous utilisons la méthode TryParse pour valider que les deux variables ont un format Guid valide ou non. En lançant un exemple, vous pouvez voir que la variable de chaîne n’a pas un format guid valide et donne un message de “guid InValid”. Si la variable de chaîne a un guid valide, cela retournera true dans la méthode TryParse.

Pour que C # .Net trouve et remplace toute chaîne guidée à partir du texte donné,

Utilisez ce regEx:

 [({]?[a-zA-Z0-9]{8}[-]?([a-zA-Z0-9]{4}[-]?){3}[a-zA-Z0-9]{12}[})]? 

Exemple de code C #:

 var result = Regex.Replace( source, @"[({]?[a-zA-Z0-9]{8}[-]?([a-zA-Z0-9]{4}[-]?){3}[a-zA-Z0-9]{12}[})]?", @"${ __UUID}", RegexOptions.IgnoreCase ); 

Fonctionne sûrement! Et cela correspond aux styles suivants, qui sont tous des formats équivalents et acceptables pour un GUID.

 "aa761232bd4211cfaacd00aa0057b243" "AA761232-BD42-11CF-AACD-00AA0057B243" "{AA761232-BD42-11CF-AACD-00AA0057B243}" "(AA761232-BD42-11CF-AACD-00AA0057B243)"