Question

Question facile cette fois-ci.

J'essaie de tester si une chaîne de caractères ne contient pas de caractère utilisant des expressions régulières. Je pensais que l'expression était de la forme "[^ x ]" où x est le caractère que vous ne souhaitez pas afficher, mais cela ne semble pas fonctionner.

Par exemple,

Regex.IsMatch("103","[^0]")

et

Regex.IsMatch("103&","[^&]")

les deux retournent vrai (je m'attendrais à faux).

J'ai commencé à utiliser " [^ & amp;] " et je me suis dit que le & amp; devait être échappé en tant que \ & amp;, mais cela ne semblait pas faire une différence.

Des idées? Je suppose que c'est quelque chose de petit.

De plus, j'utilise .NET, alors gardez cela à l'esprit.

Modifier1:

J'ai trouvé this , mais cela ne semble pas répondre au problème que je rencontre.

Modifier2:

Je voulais répondre à Kevin et Suggestions de Joel . Ces suggestions seraient effectivement plus rapides, mais elles n'apportent pas la flexibilité dont j'ai besoin dans ce cas. Si vous avez trouvé cette question par le biais de la fonction de recherche, vérifiez si ses réponses répondront à vos besoins. Dans mon cas, l'expression régulière est transmise à une méthode de validation DataTable qui parcourt chaque ligne et vérifie que le contenu de cette ligne dans une colonne spécifique correspond au RegEx qui est transmis. Depuis, je vais réutiliser cette méthode. pour plusieurs autres DataTables en cours de validation, je voulais:

  1. Utilisez Regex pour activer la plus large gamme de validations et
  2. Cherchez toujours une correspondance positive (c’est-à-dire au lieu d’utiliser! Regex.IsMatch (cellule, variable de regex), je voulais pouvoir toujours utiliser Regex.IsMatch (cellule, variable de regex) depuis que la majorité des DataTables invoquaient cette méthode. utilisera le résultat positif au lieu du résultat négatif.

Espérons que cela aide.

Était-ce utile?

La solution

Votre solution est à moitié juste. La correspondance que vous voyez est pour les autres personnages. Ce que vous voulez dire, c'est quelque chose comme "hé! Je ne veux pas voir ce caractère dans toute la chaîne ".

Dans ce cas, vous faites:

Regex.IsMatch("103","^[^0]*<*>quot;)

Autres conseils

Le modèle [^ 0] correspond à tout caractère autre que zéro. Dans les deux exemples, le motif correspond au premier caractère ("1"). Pour vérifier si la chaîne entière ne contient pas de zéros, le modèle doit être "^ [^ 0] * $". Cela se lit comme suit: Commencez au début de la chaîne, faites correspondre un nombre arbitraire de caractères qui ne sont pas des zéros, suivis immédiatement de la fin de la chaîne. Toute chaîne contenant un zéro échouera. Toute chaîne ne contenant aucun zéros passera.

Si vous recherchez un seul caractère dans une chaîne, l'expression régulière semble un peu exagérée. Pourquoi ne pas simplement utiliser .IndexOf ou .Contains?

Le premier caractère atteint par l'analyseur est "1", ce qui est vrai pour [^ 0] et également pour [^ & amp], donc il retournera vrai dans ces deux exemples.

Vous mettez votre négation au mauvais endroit. [^ x] correspondra à tout ce qui n'est pas x. Si x est dans la chaîne, la chaîne correspond toujours à l'expression s'il existe également d'autres caractères. Au lieu de cela, vous voulez faire correspondre true si x est présent, puis annuler le résultat de la fonction:

Not Regex.IsMatch("103", "0")

Not Regex.IsMatch("103&", "&")

Cela ne veut pas dire qu'avec ces exemples simples, String.IndexOf () ou String.Contains () normal serait un meilleur choix.

Je suis tombé sur cette question à la recherche de la même chose mais de JavaScript. L'expression ci-dessus n'a pas fonctionné dans mon cas, mais je suis tombé sur l'expression ci-dessous qui fonctionnait. (Juste au cas où d'autres personnes à la recherche d'une solution JavaScript aboutiraient là aussi.)

^ ((?! 0).) * $

Cette construction s'appelle un une anticipation négative

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top