web-dev-qa-db-fra.com

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 celle-ci:

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

etc.

Je sais que je pourrais utiliser trim etc., mais j'aimerais utiliser une expression régulière.

Merci.

Christian

36
cs0815
^(?!\s*$).+

correspondra à toute chaîne contenant au moins un caractère autre que l'espace.

Alors

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 prétendu regard négatif, affirme qu'il est impossible de ne faire correspondre que des caractères d'espacement jusqu'à la fin de la chaîne.

.+ fera alors la correspondance. Cela correspond à tout (sauf newline) jusqu'à la fin de la chaîne. Si vous souhaitez autoriser les nouvelles lignes, vous devez 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 sont vides).

L'exact opposé:

^\S+$

ne fait correspondre que des chaînes composées uniquement de caractères non-blancs, un minimum de caractères.

91
Tim Pietzcker

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

31
SLaks

Vous pouvez faire l'une des deux choses suivantes:

  • match contre ^\s*$; une correspondance signifie que la chaîne est "vide"
    • ^, $ sont respectivement le début et la fin des ancres de chaîne
    • \s est un caractère d'espacement
    • * est zéro ou plus répétition de
  • trouvez un \S; une occurrence signifie que la chaîne n'est PAS "vide"
    • \S est la version refusée de \s (notez la différence de casse)
    • \S correspond donc à n'importe quel caractère non-blanc

Références

Questions connexes

3
polygenelubricants

Les assertions ne sont pas nécessaires pour cela. \S devrait fonctionner seul car il correspond à tout espace non blanc.

3
recursive

Vous pouvez aussi utiliser:

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

Qu'en est-il de?

/.*\S.*/

Ça signifie

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

alors vous obtenez
correspond à tout sauf à la nouvelle ligne + à quelque chose qui n’est pas un espace + à tout sauf à la nouvelle ligne

2
Timo Huovinen

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

grep --invert-match

0
bruziuz

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

0
Fusyion