#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
incheckForregularBarcodeSyntax
, когда последнее возвращает 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 #. Похоже, но не совсем то же самое.