Сопоставление (легко??) регулярное выражение, использующее регулярное выражение C#

#c# #regex

Вопрос:

Хорошо, извините, это может показаться глупым вопросом, но я не могу понять эту вещь :

Я пытаюсь проанализировать строку и просто хочу проверить, содержит ли она только следующие символы : ‘0123456789dD ‘

Я перепробовал много вещей, но просто не могу найти правильное регулярное выражение для использования!

 
  Regex oReg = new Regex(@"[d dD ] ");
  oReg.IsMatch("e4");
 

вернет значение true, даже если e не разрешено…
Я перепробовал много строк, включая регулярное выражение(«[1234567890 dD ] «)…

Это всегда работает с регулярными выражениями, но не в C#…

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

Ответ №1:

Попробуй это:

 @"^[0-9dD  ] $"
 

^ И $ в начале и в конце означают начало и конец входной строки соответственно. Таким образом, между началом и концом допускаются только указанные символы. В вашем примере регулярное выражение совпадает, если строка содержит один из символов, даже если она содержит и другие символы.

@комментарии: Спасибо, я исправил пропажу и пробел.

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

1. Я думаю, что вашему примеру нужен еще один или * перед$, в настоящее время он соответствует только одному символу

Ответ №2:

Упс, ты забыл о границах, попробуй:

 Regex oReg = new Regex(@"^[0-9dD  ] $");
oReg.IsMatch("e4");
 

^ соответствует началу текстового потока, $ соответствует концу.

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

1. Пространство было создано по оригинальному образцу

Ответ №3:

Он соответствует 4; вам нужно ^ и$, чтобы завершить регулярное выражение, если вы хотите, чтобы вся строка полностью соответствовала, т. е.

     Regex re = new Regex(@"^[d dD ] $");
    Console.WriteLine(re.IsMatch("e4"));
    Console.WriteLine(re.IsMatch("4"));
 

Ответ №4:

Это связано с тем, что регулярные выражения также могут совпадать с частями входных данных, в этом случае они просто совпадают с «4» из «e4». Если вы хотите сопоставить целую строку, вы должны окружить регулярное выражение «^» (соответствует началу строки) и «$» (соответствует концу строки).

Поэтому, чтобы ваш пример работал, вы должны написать следующее:

 Regex oReg = new Regex(@"^[d dD ] $");
oReg.IsMatch("e4");
 

Ответ №5:

Я считаю, что он возвращает истину, потому что он находит 4. Ничто в регулярном выражении не исключает букву e из результатов.

Ответ №6:

Другой вариант-перевернуть все, чтобы оно совпадало с символами, которые вы не хотите разрешать:

 Regex oReg = new Regex(@"[^0-9dD ]");
!oReg.IsMatch("e4");