У меня есть следующий простой тест, который по какой-то причине не возвращает true.
string[] test = new string[] { "A", " ", " ", "D", "" };
Regex reg = new Regex(@"^[A-Z]\s$");
bool ok = test.All(x => reg.IsMatch(x));
Я также попытался помещать \s в квадратные скобки, но это не работает.
Я хочу убедиться, что все символы в массиве, которые не являются пустыми или пустыми, соответствуют A-Z.
Я понимаю, что я мог бы делать Where (x = > ! String.IsNullorEmpty(x) & x!= "") перед All, но я думал, что Regex может справиться с этим сценарием
Я думаю, вы хотите:
Regex reg = new Regex(@"^[A-Z\s]*$");
В основном это означает, что строка полностью состоит из пробелов или A-Z.
Если вы хотите заставить его быть единственным символом или пустым, просто измените его на:
Regex reg = new Regex(@"^[A-Z\s]?$");
Enumerable.All<TSource> Method
Определяет, удовлетворяют ли всем элементам последовательности.
В регулярном выражении ^[A-Z]\s$
говорится: двухсимвольная строка, чей первый символ A-Z
, а второй - пробел. Вы действительно хотите ^[A-Z\s]*$
.