web-dev-qa-db-fra.com

Regex C # pour Guid

Je dois analyser une chaîne et ajouter des guillemets simples autour de chaque valeur Guid. Je pensais que je pourrais utiliser un Regex pour faire cela, mais je ne suis pas exactement un gourou du Regex.

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

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

return Regex.Replace(stringToFindMatch, GuidRegex, match =>
{
    return string.Format("'{0}'", match.Groups[0].ToString());
});

Une chaîne que j'essaie d'analyser peut ressembler à ceci:

"SÉLECTIONNER le mot de passe" .PASSWORD_CONFIG "ID"

107
Cole W

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

resultString = Regex.Replace(subjectString, 
     @"(?im)^[{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$", 
     "'$0'");

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 indique dans les commentaires que la regex ci-dessus correspondra aux faux positifs qui ont un délimiteur de fermeture incorrect.

Ceci peut être évité par les conditionnelles regex qui sont largement supportées.

Les conditions sont prises en charge 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 fonctions d’expression régulière basées sur PCRE prennent également en charge les conditionnelles. (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 les chiffres et indiquer de manière plus claire ce qui est requis si nécessaire.

171
buckley

La regex la plus basique est la suivante:

(^([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 pourriez collez-le ici .

J'espère que cela vous fait gagner du temps.

33
Matas Vaitkevicius

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:

enter image description here

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

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

return myRegex.Replace(strTargetString, strReplace);
9
Contango

Dans .NET Framework 4, la structure System.Guid a été améliorée. Celles-ci incluent les nouvelles méthodes TryParse et TryParseExact pour analyser le GUID. Voici un exemple pour cela.

    //Generate New GUID
    Guid objGuid = Guid.NewGuid();
    //Take invalid guid format
    string strGUID = "aaa-a-a-a-a";

    Guid newGuid;

    if (Guid.TryParse(objGuid.ToString(), out newGuid) == true)
    {
        Response.Write(string.Format("<br/>{0} is Valid GUID.", objGuid.ToString()));
    }
    else
    {
        Response.Write(string.Format("<br/>{0} is InValid GUID.", objGuid.ToString()));
    }


    Guid newTmpGuid;

    if (Guid.TryParse(strGUID, out newTmpGuid) == true)
    {
        Response.Write(string.Format("<br/>{0} is Valid GUID.", strGUID));
    }
    else
    {
        Response.Write(string.Format("<br/>{0} is InValid GUID.", strGUID));
    }

Dans cet exemple, nous créons un nouvel objet guid et prenons également une variable chaîne qui a un guid invalide. Après cela, nous utilisons la méthode TryParse pour valider que les deux variables ont ou non un format GU valide. En donnant l'exemple, vous pouvez voir que la variable chaîne n'a pas de format guid valide et donne le message "InValid guid". Si la variable de chaîne a un guid valide, cela retournera true dans la méthode TryParse.

6
Jayesh Sorathia

Pour que C # .Net trouve et remplace toute chaîne de recherche de texte dans le texte donné,

Utilisez ce RegEx:

[({]?[a-fA-F0-9]{8}[-]?([a-fA-F0-9]{4}[-]?){3}[a-fA-F0-9]{12}[})]?

Exemple de code C #:

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

Travaille sûrement! Et il correspond et remplace les 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)" 
6
GDroid

J'utilise un motif regex plus facile

^[0-9A-Fa-f\-]{36}$
0