expression régulière pour tout sauf une chaîne vide

Est-il possible d'utiliser une expression régulière pour détecter tout ce qui n'est PAS une "chaîne vide", comme ceci:

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

Etc.

Je sais que je pourrais utiliser trim etc. mais je voudrais utiliser une expression régulière.

Merci.

Chrétienne

32
demandé sur Wiktor Stribiżew 2010-06-21 18:33:03

8 réponses

^(?!\s*$).+

Correspondra à toute chaîne contenant au moins un caractère non-Espace.

Donc

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

Devrait le faire pour vous.

^ ancre la recherche au début de la chaîne.

(?!\s*$), un soi-disant lookahead positif, affirme qu'il est impossible de ne faire correspondre que les caractères d'espaces jusqu'à la fin de la chaîne.

.+ fera alors réellement le match. Il correspondra à n'importe quoi (sauf newline) jusqu'à la fin de la chaîne. Si vous souhaitez autoriser les retours à la ligne, vous devrez définir l'option RegexOptions.Singleline.


Reste de la version précédente de votre question:

^\s*$

Correspond aux chaînes qui ne contiennent que des espaces (ou qui sont vides).

L'exact opposé:

^\S+$

Ne correspond qu'aux chaînes composées uniquement de caractères non-espaces, un caractère minimum.

84
répondu Tim Pietzcker 2010-06-21 15:31:58

Dans .Net 4.0, vous pouvez également appeler String.IsNullOrWhitespace.

30
répondu SLaks 2010-06-21 14:34:54

Vous pouvez faire l'une des deux choses suivantes:

  • match contre ^\s*$; une correspondance signifie que la chaîne est " vide"
    • ^, $ sont le début et la fin des ancres de chaîne respectivement
    • {[3] } est un caractère d'Espace
    • * est une répétition nulle ou plus de
  • trouver un \S; une occurrence signifie que la chaîne n'est PAS vide"
    • \S est la version niée de \s (notez la différence de CAs)
    • \S correspond donc tout caractère non-Espace

Références

Questions connexes

3
répondu polygenelubricants 2017-05-23 12:34:51

Vous pouvez également utiliser:

public static bool IsWhiteSpace(string s) 
{
    return s.Trim().Length == 0;
}
2
répondu jjnguy 2010-06-21 14:45:17

Les Assertions ne sont pas nécessaires pour cela. {[0] } devrait fonctionner seul car il correspond à n'importe quel espace non-blanc.

2
répondu recursive 2010-06-21 17:00:46

De quoi?

/.*\S.*/

Cela signifie

/ = délimiteur
.* = zéro ou plus de tout sauf newline
\S = tout sauf un espace (nouvelle ligne, tabulation, espace)

Donc vous obtenez
faire correspondre tout sauf newline + quelque chose pas d'espace + tout sauf newline

2
répondu Timo Huovinen 2014-03-27 10:37:16

Je pense que [ ]{4} pourrait fonctionner dans l'exemple où vous devez détecter 4 espaces. De même avec le reste: [ ]{1}, [ ]{2} et [ ]{3}. Si vous voulez détecter une chaîne vide en général, ^[ ]*$ va faire.

0
répondu Fusyion 2010-06-21 14:34:38

Créez "expression régulière pour détecter la chaîne vide" , puis inversez-la. Invesion du langage régulier est le langage régulier, et je pense que la bibliothèque d'expressions régulières de CLR devrait supporter l'inversion comme

Grep --invert-match

0
répondu bruziuz 2015-09-17 14:30:25