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:

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:

  • correspondre à ^\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
  • trouver 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

  • regular-expressions.info , Ancres , Répétition
  • MSDN – Classes de caractères – Caractères d’espacement \ s
    • Notez que, sauf si vous utilisez RegexOptions.ECMAScript , \s correspond à des points tels que des points de suspension

Questions connexes

  • Regex .Net: quel est le mot caractère \ w?

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