Подтвердить что ты не робот

Регулярное выражение для чего-либо, кроме пустой строки в С#

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

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

и др.

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

Спасибо.

Christian

4b9b3361

Ответ 1

^(?!\s*$).+

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

Итак,

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

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

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

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

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


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

^\s*$

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

Точная противоположность:

^\S+$

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

Ответ 3

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

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

Ссылки

Связанные вопросы

Ответ 4

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

public static bool IsWhiteSpace(string s) 
{
    return s.Trim().Length == 0;
}

Ответ 5

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

Ответ 6

Как насчет?

/.*\S.*/

Это означает

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

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

Ответ 7

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

Ответ 8

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

grep -invert-match