expression régulière pour rien, mais 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 tiens à utiliser une expression régulière.
- Je suis désolé, j'ai édité ma question comme ça devait l'être 'annulé'
- Si je peux me permettre, quelle est la raison impérieuse d'utiliser une expression régulière plutôt que la fonction intégrée?
- Dans .net vernaculaire, seul votre premier exemple ("") est considérée comme une "chaîne vide". Les autres sont purement espaces--mais pas vide. Cette apparente différence mineure a donné quelques trop compliqués, les réponses ci-dessous.
Vous devez vous connecter pour publier un commentaire.
correspond à toute chaîne de caractères qui contient au moins un caractère non espace.
Donc
devrait le faire pour vous.
^
ancres de la recherche au début de la chaîne.(?!\s*$)
, un soi-disant anticipation négatif, affirme qu'il est impossible de faire correspondre uniquement les espaces jusqu'à la fin de la chaîne..+
sera alors réellement faire le match. Elle correspond à quoi que ce soit (à l'exception de retour à la ligne) jusqu'à la fin de la chaîne. Si vous voulez autoriser les retours à la ligne, vous devez définir laRegexOptions.Singleline
option.Gauche au cours de la précédente version de votre question:
correspond à des chaînes qui ne contiennent que des espaces (ou vides).
L'exact opposé:
ne correspond qu'à des chaînes qui sont composés uniquement de non-caractères espace, un caractère minimal.
\S
qui correspond à n'importe quel caractère non-blancDans .Net 4.0, vous pouvez également appeler
String.IsNullOrWhitespace
.null
.Vous pouvez faire une des deux choses:
^\s*$
; un match moyen de la chaîne est "vide"^
,$
sont le début et la fin de la chaîne ancres respectivement\s
est un caractère d'espacement*
est égal à zéro ou la répétition de\S
; une occurrence signifie que la chaîne n'est PAS "vide"\S
est le démenti la version de\s
(notez la différence de casse)\S
donc correspond à tout caractère non-blancRéférences
RegexOptions.ECMAScript
,\s
correspond à des choses comme des points de suspension…
Questions connexes
Affirmations ne sont pas nécessaires pour cela.
\S
devrait fonctionner par lui-même car il correspond à n'importe quel non-blanc.Vous pouvez également utiliser:
IsWhiteSpace("test")
=> true.Sur quoi?
Cela signifie
/
= délimiteur.*
= zéro ou plus de rien, mais de retour à la ligne\S
= tout sauf un espace (saut de ligne, tabulation, espace)de sorte que vous obtenez
match rien mais newline + quelque chose de pas espace + quelque chose, mais de retour à la ligne
Je pense que
[ ]{4}
pourrait fonctionner dans l'exemple où vous avez besoin de détecter les 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,^[ ]*$
fera.On peut aussi utiliser espace dans un char de classe, dans une expression similaire à celui ci:
en fonction de la langue/de la saveur que nous pourrions utiliser.
RegEx Démo
Test
C# Démo
Si vous souhaitez simplifier/modifier/explorer l'expression, c'est expliqué sur le panneau en haut à droite de regex101.com. Si vous le souhaitez, vous pouvez également regarder dans ce lien, de la manière de match contre quelques exemples d'entrées.
RegEx Circuit
jex.im visualise les expressions régulières:
Créer "expression régulière pour détecter la chaîne vide", et puis inverse il.
Invesion de langage régulier est le langage régulier. Je pense que l'expression régulière de la bibliothèque dans ce que vous l'effet de levier doit être pris en charge, mais si pas, vous pouvez toujours écrire votre propre bibliothèque.