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
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.
Dans .Net 4.0, vous pouvez également appeler String.IsNullOrWhitespace
.
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
- regular-expressions.info, les Ancres, la Répétition
-
MSDN-classes de caractères-espaces caractères \ S
- notez que sauf si vous utilisez
RegexOptions.ECMAScript
,\s
correspond à des choses comme les points de suspension…
- notez que sauf si vous utilisez
Questions connexes
Vous pouvez également utiliser:
public static bool IsWhiteSpace(string s)
{
return s.Trim().Length == 0;
}
Les Assertions ne sont pas nécessaires pour cela. {[0] } devrait fonctionner seul car il correspond à n'importe quel espace non-blanc.
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
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.
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