Есть ли способ сопоставить строку, которая также имеет номера, используя только Regex.IsMatch? - PullRequest
0 голосов
/ 02 июля 2019

Я хочу знать, есть ли выражение регулярного выражения для оценки строки, отформатированной так: «XXYYYY», где XX - любая буква, а YYYY - любое число.

Я использую этот код, чтобы подтвердить это, хотя яуверен, что есть лучший способ без использования Substring и только Regex.IsMatch.Спасибо!

 if (Regex.IsMatch(ValueString.Substring(0, 2), @"^[a-zA-ZñÑ\s]+$"))
 {
   if (int.TryParse(ValueString.Substring(2, 4), out value))
   {
   return true;
   }
 }

Ответы [ 5 ]

2 голосов
/ 02 июля 2019

Вы можете проверить это с помощью этого ^\p{L}{2}\p{Nd}{4}$

объяснил

 ^             # BOS
 \p{L}{2}      # Two letters
 \p{Nd}{4}     # Four number digits
 $             # EOS
1 голос
/ 02 июля 2019

Просто добавьте квантификаторы и шаблон для чисел к существующему шаблону:

return Regex.IsMatch(ValueString, @"^[a-zA-ZñÑ]{2}[0-9]{4}$");

{2} означает «ровно 2 из предыдущего выражения».Использование [0-9] вместо \d ограничивает диапазон чисел, совпадающих с латинскими десятичными цифрами (\d+ будет также включать цифры из других алфавитов)

1 голос
/ 02 июля 2019

Вы можете использовать одно регулярное выражение для проверки ровно 2 букв и 4 цифр:

if (Regex.IsMatch(ValueString, "^[a-zA-ZñÑ\s]{2}[\d]{4}$");
0 голосов
/ 03 июля 2019
Pattern : ^\w{2}\d{4}$
Match groups:
1.  df5455

https://rubular.com/r/031g7m7uTE5MvU

0 голосов
/ 02 июля 2019

Еще одно решение:

  string[] data =
  {
    "AB1234", // True
    "XA3456", // True
    "3d34hg", // False
    " .1234", // False
    "ñÑ1234", // True
    "ôà1234", // True 
  };

  foreach (bool result in data.Select(s => Regex.IsMatch(s, @"^[^\d\s\W]{2}\d{4}$")))
  {
    Console.WriteLine(result);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...