2009-03-08 3 views
0

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

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

мой IDE говорит, что \ s является «Непризнанный последовательность выхода»

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

ответ

6

"\" является символом escape-функции C#, а также символом escape регулярного выражения. Попробуйте:

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

Вы должны положить @ перед вашей строки, чтобы превратить его в verbatim string literal:

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

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

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

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

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

1

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

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

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

+0

Хороший вопрос. Я думал, что что-то не так с этим в группе. – Joel

Смежные вопросы