сравнивая строку в C # против статического регулярного выражения? - PullRequest
1 голос
/ 10 июня 2011

Мне было интересно, есть ли простой способ для тех, кто действительно не знаком с regex, узнать, как сопоставить строку с форматом regex для указанной строки?

Например, эта строка, которая генерируется из другой функции, которую я имею:

3A5AE0F4-EB22-434E-80C2-273E315CD1B0

Понятия не имею, что такое регулярное выражение для этой строки.

Допустим, у меня была функция, принимающая эту строку в качестве параметра

        public static bool isValidRegex(string inputString)
        {
            Regex myRegex = ????

            if inputstring matches myRegex then
            return true;

            else 
            return false;


        }

Что бы Regex сделал, чтобы эта функция возвращала true?

ПРИМЕЧАНИЕ. Поскольку я не знаком с C #, приведенный код может быть неверным, и я в курсе.

Ответы [ 4 ]

9 голосов
/ 10 июня 2011

В этом случае, похоже, что это Guid - если вы используете .NET 4, самый простой подход, вероятно, заключается в использовании Guid.TryParse ... но если вам нужно использоватьregex, это, вероятно, будет:

^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$

Другими словами, начало строки, 8 шестнадцатеричных цифр, тире, 4 шестнадцатеричных цифры, тире, 4 шестнадцатеричных цифры, тире, 4 шестнадцатеричных цифры, тире, 12 шестнадцатеричныхцифры, конец строки.Обратите внимание, что я предположил , что любые буквенные символы будут в верхнем регистре, а не в нижнем.

Вероятно, стоит создать это только один раз и, возможно, скомпилировать, так что в итоге вы получите:

private static readonly Regex GuidPattern = new Regex
    ("^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$",
      RegexOptions.Compiled);

public static bool IsValidRegex(string inputString)
{
    return GuidPattern.IsMatch(inputString);
}
1 голос
/ 10 июня 2011

, если формат 8 букв - 4 - 4 - 4 - 12

тогда это

[0-9A-Z] {8} - [0-9A-Z] {4} - [0-9A-Z] {4} - [0-9A-Z] {4} - [0- 9A-Z] {12}

0 голосов
/ 10 июня 2011

Regex - это способ сопоставления точного значения с шаблоном.Но вам нужно знать, какую модель вы примете.В приведенном вами примере, что обеспечивает приемлемое совпадение?

"3A5AE0F4-EB22-434E-80C2-273E315CD1B0" - это точное значение

Будете ли вы счастливы, если кто-то пройдет мимо "3A5AE0F4-EB22-434E-80C2-273E315CD1B1 "или" xxxxxxxx-EB22-434E-80C2-273E315CD1B0 "

или" xxx "

или 3.14257

и т. Д.

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

Тогда

 string sPattern = "^[a-zA-Z0-9]+$";
 bool match = Regex.IsMatch(yourstring, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase)

вернет true, если ваша строка содержит только буквенно-цифровые символы

0 голосов
/ 10 июня 2011

Что-то вроде этого:

^[0-9A-Z]{8}-[0-9A-Z]{4}[0-9A-Z]{4}[0-9A-Z]{4}[0-9A-Z]{12}$

Между фигурными скобками у вас есть количество элементов, а между [] у вас есть все возможные цифры и буквы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...