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:
ssortingng s1 = ""; ssortingng s2 = " "; ssortingng s3 = " "; ssortingng s4 = " ";
etc.
Je sais que je pourrais utiliser sortingm etc., mais j’aimerais utiliser une expression régulière.
Merci.
Christian
^(?!\s*$).+
correspondra à toute chaîne contenant au moins un caractère non-espace.
Alors
if (Regex.IsMatch(subjectSsortingng, @"^(?!\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 faire correspondre uniquement les caractères d’espacement jusqu’à la fin de la chaîne.
.+
fera alors effectivement le match. 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 les chaînes composées uniquement de caractères non blancs, un minimum de caractères.
En .Net 4.0, vous pouvez également appeler Ssortingng.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 la répétition zéro ou plus 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-blanc RegexOptions.ECMAScript
, \s
correspond à des points tels que des points de suspension …
Vous pouvez aussi utiliser:
public static bool IsWhiteSpace(ssortingng s) { return s.Trim().Length == 0; }
Les assertions ne sont pas nécessaires pour cela. \S
devrait fonctionner seul car il correspond à tout espace non blanc.
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 ne correspond pas aux espaces + à la nouvelle ligne
Je pense que [ ]{4}
pourrait fonctionner dans l’exemple où vous devez détecter 4 espaces. Idem pour le rest: [ ]{1}
, [ ]{2}
et [ ]{3}
. Si vous voulez détecter une chaîne vide en général, ^[ ]*$
fera l’affaire.
Créez une “expression régulière pour détecter une chaîne vide”, puis inversez-la. L’involution du langage standard est le langage standard, et je pense que la bibliothèque d’expression régulière de CLR devrait supporter une inversion
grep –invert-match