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
^(?!\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.
En .Net 4.0, vous pouvez également appeler String.IsNullOrWhitespace
.
Vous pouvez faire l'une des deux choses suivantes:
^\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\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-blancRegexOptions.ECMAScript
, \s
correspond à des choses comme Ellipsis …
Les assertions ne sont pas nécessaires pour cela. \S
devrait fonctionner seul car il correspond à tout espace non blanc.
Vous pouvez aussi utiliser:
public static bool IsWhiteSpace(string s)
{
return s.Trim().Length == 0;
}
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
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
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.