Простой шаблон регулярных выражений - PullRequest
0 голосов
/ 08 марта 2009

Я использую C # и пытаюсь разрешить только буквы алфавита и пробелы. мое выражение на данный момент:

string regex = "^[A-Za-z\s]{1,40}$";

моя IDE говорит, что \ s это "Нераспознанная escape-последовательность"

что мне не хватает?

Ответы [ 3 ]

6 голосов
/ 08 марта 2009

"\" - это escape-символ c #, а также escape-символ regex. Попробуйте:

string regex = @"^[A-Za-z\s]{1,40}$";
2 голосов
/ 08 марта 2009

Вам нужно поставить @ перед строкой, чтобы превратить ее в дословный строковый литерал :

string regex = @"^[A-Za-z\s]{1,40}$";

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

Кроме того, вы можете просто избежать обратной косой черты с помощью:

string regex = "^[A-Za-z\\s]{1,40}$";

но в целом предпочитают первый подход второму.

1 голос
/ 08 марта 2009

Дополнительное примечание: ваше регулярное выражение не выполняет то, что вы описываете. Вы говорите максимум 1 пробел между словами. Для этого вам нужно убрать «\ s» из списка символов. Шаблон, который вы используете в настоящее время, допускает «любой алфавитно-цифровой или пробел от 1 до 40 раз», что позволяет использовать несколько последовательных пробелов. Вам понадобится что-то похожее на следующее:

string regex = @"^(?:[A-Za-z]+\s?)+$";

Это означает «любой буквенно-цифровой 1 или более раз, за ​​которым следует дополнительный пробел, все это один или более раз». Я не знаю, как ограничить всю строку до 40 символов, если вы не знаете заранее размер первого выражения. Может быть, этого можно добиться с помощью выражения «оглянуться назад», но я не уверен. Возможно, вам придется сделать это в два этапа.

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