2015-06-24 2 views
2

Допустимый ввод - это любые два заглавных буквы, но они не могут быть одинаковой буквой. Я думал, что следующее будет работать, вычитая первую согласованную группу (первую букву) из класса символов для второй буквы.Совпадение двух разных букв

Regex ValidInput = new Regex(@"^([A-Z])[A-Z-[\1]]$"); 

ValidInput.IsMatch("AA"); // should be false but is true 

Почему это неправильно и как правильно это сделать? Спасибо!

ответ

1

Мне нравится регулярное выражение, и все, но я думаю, что это более читаемым:

var valid = yourString.length == 2 
    && char.IsUpper(yourString[0]) 
    && char.IsUpper(yourString[1]) 
    && yourString[0] != yourString[1]; 

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

+0

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

+0

Также, надеюсь, он хорошо комментирует, поэтому, когда кто-то просматривает свой код, им не нужно ничего что-либо выяснять, просто прочитайте комментарий, рассказывающий им, что он делает. –

+0

Но разве они не говорят, что комментарии злы? Иногда они лгут. :-) Но да, я согласен с тобой. Регулярные выражения, безусловно, являются исключением для великих комментаторов комментариев. –

2

Попробуйте это регулярное выражение

^(?:([A-Z])(?!.*\1)){2}$ 
Смежные вопросы