Старое разочарование в регулярных выражениях

#c# #regex

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

Вопрос:

Я новичок в регулярных выражениях и попытался хорошо прочитать, но в конечном итоге это не работает. Я пытаюсь сопоставить строку, состоящую из 2 букв, а затем 4 цифр. нет пробелов. только заглавные буквы. Я использую

 "^[A-Z]{2}[0-9]{4}$"
  

и когда я передаю его AB1234 , он говорит FALSE.

Где я ошибся и как мне заставить это регулярное выражение работать. Спасибо!

Редактировать: у меня есть UserControl ( ctrlSamplerSet ) с вызываемым текстовым txtSamplerBarcode полем. Я вызываю метод usercontrol Validate() для txtSamplerBarcode.TextChanged события, которое запускает этот метод

 private void ctrlSamplerSet_Validating(object sender, CancelEventArgs e)
    {
        string bc = txtSamplerBarcode.Text;
        if (bc.Contains("UP")) { _validEntry= checkForregularBarcodeSyntax(bc); }
    }
  

Я передаю свойство text этого моему checkForregularBarcodeSyntax методу.

 private bool checkForregularBarcodeSyntax(string bc)
    {
        Regex regBCsyntax = new Regex(@"^[A-Z]{2}[0-9]{4}$",RegexOptions.None);
        bool matchSuccess= regBCsyntax.IsMatch(bc);
        return matchSuccess;
    }
  

matchSuccess является ложным при любых обстоятельствах.

Я не знаю, достаточно ли этого для вас?

Комментарии:

1. Выглядит хорошо для меня. Что именно говорит FALSE?

2. Этот шаблон верен для тестовой строки. Ищите свою проблему в другом месте. Есть ли у вас какие-либо начальные или конечные пробелы в вашей строке?

3. На самом деле напишите нам небольшую программу, которая демонстрирует проблему, и опубликуйте ее.

4. Это AB1234 целая строка или в ней есть что-то еще? Кроме того, не могли бы вы показать код, который вы используете для получения false?

5. Каково значение bc in checkForregularBarcodeSyntax , когда последнее возвращает false ? Используйте отладчик, чтобы проверить это, или распечатайте его в файле журнала.

Ответ №1:

Ваш шаблон верен. Может быть, вы можете последовать этому примеру, чтобы обнаружить свою ошибку.

 Regex r = new Regex("^[A-Z]{2}[0-9]{4}$");
Console.WriteLine (r.Match("AB1234").Success);
  

Вывод:

 True
  

Ответ №2:

вы пробовали сопоставлять его без начальных ^ и конечных $ символов, как в [A-Z]{2}[0-9]{4} ?

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

 Match match = Regex.Match("AB1234", @"[A-Z]{2}[0-9]{4}");
if (match.Success) 
{
    ...
}
  

Ответ №3:

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

 Regex r = new Regex("^[A-Za-z]{2}[0-9]{4}$");
  

или

 Regex r = new Regex("^[A-Z]{2}[0-9]{4}$",RegexOptions.IgnoreCase);
  

Ответ №4:

Я использовал Visual Studios Ctrl F, используя регулярные выражения в качестве механизма тестирования (на мой взгляд, это самый простой способ массового повторения вашего теста!)

Когда я запускал ваш исходный запрос, он не работал с вашим образцом текста.

Последнее регулярное выражение, которое я придумал, чтобы привести его в соответствие, было

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

Я не уверен, почему [0-9] {4} не работал, но это регулярное выражение зависит от движка.

Комментарии:

1. итак, вы вводите именно это в поле поиска и нажимаете найти далее? и оно соответствует на основе регулярного выражения?

2. В Visual studio вам нужно расширить параметры поиска, есть переключатель для «Использовать регулярное выражение», и да, точно, работает намного быстрее, чем компиляция чего-либо. Это также работает практически в любой среде IDE, включая пакет Microsoft Office и большинство редакторов notepad.

3. Обратите внимание, что регулярные выражения VS не имеют того же синтаксиса, что и регулярные выражения C #. Похоже, но не совсем то же самое.