C# регулярное выражение для Guid



мне нужно разобрать строку и добавить одинарные кавычки вокруг каждого значения Guid. Я думал, что могу использовать регулярное выражение для этого, но я не совсем гуру регулярных выражений.



есть хорошее выражение, чтобы использовать, чтобы определить идентификатор GUID?



мой второй вопрос, как только я нашел действительное регулярное выражение, Я предполагаю, что буду использовать Regex.Replace(String, String, MatchEvaluator) но я не совсем уверен в синтаксисе. Может быть, что-то вроде:



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


строка, которую я пытаюсь разобрать, может выглядеть так это:




"выберите
passwordco0_.PASSWORD_CONFIG_ID как PASSWORD1_46_0_,
ОТ
PASSWORD_CONFIG passwordco0_
ГДЕ
passwordco0_.PASSWORD_CONFIG_ID=baf04077-a3c0-454b-ac6f-9fec00b8e170;
@p0 = baf04077-a3c0-454b-ac6f-9fec00b8e170 [тип: Guid (0)]"


707   5  

5 ответов:

Это достаточно простой и не требует делегата, как вы говорите.

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

это соответствует следующим стилям, которые являются эквивалентными и приемлемыми форматами для GUID.

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

обновление 1

@NonStatic указывает в комментариях, что приведенное выше регулярное выражение будет соответствовать ложным срабатываниям, которые имеют неправильный закрывающий разделитель.

этого можно избежать с помощью регулярных условных выражений, которые в широком смысле поддерживаемый.

условные обозначения поддерживаются jgsoft engine, Perl, PCRE, Python и .NET framework. Ruby поддерживает их начиная с версии 2.0. Такие языки, как Delphi, PHP и R, что есть функции регулярных выражений на основе PCRE также поддерживают условные обозначения. (источник:http://www.regular-expressions.info/conditional.html)

следующее регулярное выражение будет соответствовать

{123}
(123)
123

и не матч

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

регулярное выражение:

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

решения упрощены, чтобы соответствовать только числам, чтобы более четко показать, что требуется, если это необходимо.

самое основное регулярное выражение следующим образом:

(^([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})$) 

вы можете вставить вот это.

надеюсь, это сэкономит вам некоторое время.

вы можете легко автоматически генерировать код C# с помощью:http://regexhero.net/tester/.

его бесплатно.

вот как я сделал это:

enter image description here

затем веб-сайт автоматически генерирует код .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 = @"""""";

return myRegex.Replace(strTargetString, strReplace);

для C# .Net, чтобы найти и заменить любой guid ищет строку из данного текста,

использовать это регулярное выражение:

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

пример кода 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
);

безусловно, работает! И он соответствует и заменяет следующие стили, которые являются эквивалентными и приемлемыми форматами для GUID.

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

в .NET Framework 4 есть система улучшения.Структуру GUID, это включает новый метод tryparse методы и метод tryparseexact для разбора идентификатора GUID. Вот пример для этого.

    //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));
    }

в этом примере мы создаем новый объект guid, а также берем одну строковую переменную, которая имеет недопустимый guid. После этого мы используем метод TryParse для проверки того, что обе переменные имеют допустимый формат guid или нет. Запустив пример, вы можете увидеть, что строковая переменная имеет недопустимый формат guid и дает сообщение "Недопустимый идентификатор". Если строковая переменная имеет допустимый идентификатор guid, то это вернет true в методе TryParse.

Comments

    Ничего не найдено.