Соответствие (простому ??) регулярному выражению с использованием регулярного выражения C # - PullRequest
2 голосов
/ 10 октября 2008

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

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

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


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

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

Он всегда работает на Regex Pal , но не на C # ...

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

Ответы [ 6 ]

8 голосов
/ 10 октября 2008

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

@ "^ [0-9dD +] + $"

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

@ комментариев: спасибо. Я исправил недостающие + и пробел.

2 голосов
/ 10 октября 2008

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

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

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

1 голос
/ 10 октября 2008

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

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

Regex oReg = new Regex(@"^[\d dD+]+$");
oReg.IsMatch("e4");
1 голос
/ 10 октября 2008

Это соответствует 4; вам нужно ^ и $ для завершения регулярного выражения, если вы хотите полное совпадение для всей строки - т.е.

    Regex re = new Regex(@"^[\d dD+]+$");
    Console.WriteLine(re.IsMatch("e4"));
    Console.WriteLine(re.IsMatch("4"));
0 голосов
/ 10 октября 2008

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

Regex oReg = new Regex(@"[^0-9dD+]");
!oReg.IsMatch("e4");
0 голосов
/ 10 октября 2008

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

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