регулярное выражение для всего, кроме пустой строки - PullRequest
38 голосов
/ 21 июня 2010

Можно ли использовать регулярное выражение для обнаружения чего-либо, что НЕ является "пустой строкой", например:

string s1 = "";
string s2 = " ";
string s3 = "  ";
string s4 = "   ";

и т.д.

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

Спасибо.

Christian

Ответы [ 8 ]

99 голосов
/ 21 июня 2010
^(?!\s*$).+

будет соответствовать любой строке, которая содержит хотя бы один непробельный символ.

So

if (Regex.IsMatch(subjectString, @"^(?!\s*$).+")) {
    // Successful match
} else {
    // Match attempt failed
}

должен сделать это для вас.

^ привязывает поиск в начале строки.

(?!\s*$), так называемый отрицательный взгляд, утверждает, что невозможно сопоставить только пробельные символы до конца строки.

.+ тогда действительно сделает матч. Он будет соответствовать чему угодно (кроме новой строки) до конца строки. Если вы хотите разрешить переводы строки, вам нужно установить опцию RegexOptions.Singleline.


Осталось от предыдущей версии вашего вопроса:

^\s*$

соответствует строкам, которые содержат только пробелы (или являются пустыми).

С точностью до наоборот:

^\S+$

соответствует только строкам, которые состоят только из непробельных символов, минимум из одного символа.

31 голосов
/ 21 июня 2010

В .Net 4.0 вы также можете позвонить String.IsNullOrWhitespace.

3 голосов
/ 21 июня 2010

Утверждения для этого не нужны. \S должно работать само по себе, поскольку оно соответствует любому непробельному пространству.

3 голосов
/ 21 июня 2010

Вы можете сделать одну из двух вещей:

  • совпадение с ^\s*$; совпадение означает, что строка «пуста»
    • ^, $ - начало и конец якоря строки соответственно
    • \s - символ пробела
    • * - ноль или более повторений
  • найти \S; вхождение означает, что строка НЕ ​​является «пустой»
    • \S является отрицательной версией \s (обратите внимание на разницу в регистре)
    • \S, следовательно, соответствует любому непробельному символу

Ссылки

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

2 голосов
/ 27 марта 2014

Как насчет?

/.*\S.*/

Это означает

/ = разделитель
.* = ноль или более всего, кроме новой строки
\S = что-нибудькроме пробелов (перевод строки, табуляция, пробел)

, поэтому вы получите
сопоставить что угодно, кроме символа новой строки + что-то не пробел + что-либо, кроме символа новой строки

2 голосов
/ 21 июня 2010

Вы также можете использовать:

public static bool IsWhiteSpace(string s) 
{
    return s.Trim().Length == 0;
}
0 голосов
/ 17 сентября 2015

Создать «регулярное выражение для обнаружения пустой строки», а затем инвертировать его. Инверсия регулярного языка - это обычный язык, и я думаю, что библиотека регулярных выражений из CLR должна поддерживать инверсию, например

grep --invert-match

0 голосов
/ 21 июня 2010

Я думаю, [ ]{4} может работать в примере, где вам нужно обнаружить 4 пробела.То же самое с остальными: [ ]{1}, [ ]{2} и [ ]{3}.Если вы хотите обнаружить пустую строку в общем, подойдет ^[ ]*$.

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