C # Regex for Guid
Мне нужно проанализировать строку и добавить одинарные кавычки вокруг каждого значения Guid. Я думал, что могу использовать Regex для этого, но я не совсем гуру-регге.
Есть ли подходящее Regex для определения Guid?
Мой второй вопрос – когда я нашел правильное регулярное выражение, я предполагаю, что я буду использовать Regex.Replace(String, String, MatchEvaluator)
но я не совсем уверен в синтаксисе. Может быть, что-то вроде:
- Как сопоставить шаблон, используя регулярное выражение в Scala?
- Escape Special Character в Regex
- Группа захвата regex java
- Удалить конечный ноль в Java
- Как работает RegexOptions.Compiled?
return Regex.Replace(stringToFindMatch, GuidRegex, match => { return string.Format("'{0}'", match.Groups[0].ToString()); });
Строка, которую я пытаюсь разобрать, может выглядеть так:
“SELECT passwordco0_.PASSWORD_CONFIG_ID как PASSWORD1_46_0_, FROM PASSWORD_CONFIG passwordco0_ WHERE passwordco0_.PASSWORD_CONFIG_ID = baf04077-a3c0-454b-ac6f-9fec00b8e170; @ p0 = baf04077-a3c0-454b-ac6f-9fec00b8e170 [Тип: Guid (0)]”
- Как получить поддержку regex в excel с помощью функции или пользовательской функции?
- Regex, чтобы проверить, содержит ли строка только числа
- Регулярное выражение для соответствия подстроке, за которой не следует определенная другая подстрока
- Как работает регулярное выражение '(? <= #) + (? = #)'?
- Является ли это RegEx для сопоставления любой ссылки на ячейку в формуле Excel?
- Регулярное выражение для выбора запятых вне кавычек
- java регулярное выражение для извлечения содержимого в квадратных скобках
- JSLint сообщает «Небезопасно» для моего регулярного выражения - что это значит?
Это довольно просто и не требует делегата, как вы говорите.
resultString = Regex.Replace(subjectString, @"^[{(]?[0-9A-F]{8}[-]?([0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$", "'$0'", RegexOptions.IgnoreCase);
Это соответствует следующим стилям, которые являются эквивалентными и приемлемыми форматами для GUID.
"ca761232ed4211cebacd00aa0057b223" "CA761232-ED42-11CE-BACD-00AA0057B223" "{CA761232-ED42-11CE-BACD-00AA0057B223}" "(CA761232-ED42-11CE-BACD-00AA0057B223)"
Обновление 1
@NonStatic указывает на то, что указанное выше регулярное выражение будет соответствовать ложным срабатываниям, которые имеют неправильный ограничитель закрытия.
Этого можно избежать с помощью регулярных выражений, которые широко поддерживаются.
Условные версии поддерживаются механизмом JGsoft, 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)
Regex:
^({)?(\()?\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/ .
Это бесплатно.
Вот как я это сделал:
Затем веб-сайт автоматически генерирует код .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);
В .NET Framework 4 улучшена структура System.Guid, которая включает в себя новые методы TryParse и TryParseExact для анализа GUID. Вот пример этого.
//Generate New GUID Guid objGuid = Guid.NewGuid(); //Take invalid guid format string strGUID = "aaa-aaaa"; Guid newGuid; if (Guid.TryParse(objGuid.ToString(), out newGuid) == true) { Response.Write(string.Format("
{0} is Valid GUID.", objGuid.ToString())); } else { Response.Write(string.Format("
{0} is InValid GUID.", objGuid.ToString())); } Guid newTmpGuid; if (Guid.TryParse(strGUID, out newTmpGuid) == true) { Response.Write(string.Format("
{0} is Valid GUID.", strGUID)); } else { Response.Write(string.Format("
{0} is InValid GUID.", strGUID)); }
В этом примере мы создаем новый объект guid, а также принимаем одну строковую переменную с недопустимым указателем. После этого мы используем метод TryParse для проверки того, что обе переменные имеют действующий формат guid или нет. При запуске примера вы можете видеть, что строковая переменная имеет неверный формат guid, и она дает сообщение «InValid guid». Если строковая переменная имеет действительный guid, то это вернет true в методе TryParse.
Для C # .Net, чтобы найти и заменить любую строку, ориентированную на руководство, из данного текста,
Используйте этот RegEx:
[({]?[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)"