Est-ce que l'espace de noms System.Text.RegularExpressions m'offre quelque chose pour découvrir si une chaîne d'entrée a ("abc [0-9]" ou "^ aeiou $") ou n'a pas ("abc123") métacaractères? Ou dois-je vérifier manuellement les caractères non échappés dans une certaine liste?Comment déterminer si une chaîne contient des métacaractères regex? (C#)
1
A
Répondre
5
Vous avez au moins trois options:
Utilisez Regex.Escape et comparer le résultat:
private static bool ContainsMetaCharacters(string s) { if (String.IsNullOrEmpty(s)) { return false; } string escaped = Regex.Escape(s); return !escaped.Equals(s, StringComparison.Ordinal); }
Appliquer Regex.Escape à chaque personnage pour voir si la valeur échappée est différente:
private static bool ContainsMetaCharacters(string s) { if (String.IsNullOrEmpty(s)) { return false; } for (int i = 0; i < s.Length; i++) { if (Regex.Escape(s.Substring(i,1))[0] != s[i]) { return true; } } return false; }
Créez votre o WN basé sur le fait que les metachars ne devraient pas changer:
private static readonly char[] _MetaChars = new char[] { '\t', '\n', '\f', '\r', ' ', '#', '$', '(', ')', '*', '+', '.', '?', '[', '\\', '^', '{', '|' }; private static bool ContainsMetaCharacters(string s) { if(String.IsNullOrEmpty(s)) { return false; } return s.IndexOfAny(_MetaChars) >= 0; }
La troisième approche offre plus de contrôle en fonction de la RegexOptions que vous utilisez dans votre Regex. Par exemple, si vous n'utilisez jamais RegexOptions.IgnorePatternWhitespace, vous pouvez supprimer de l'espace en tant que métachar.
Questions connexes
- 1. objective-c: déterminer si une regex correspond à une chaîne
- 2. Comment déterminer si la chaîne contient une sous-chaîne spécifique dans les X premiers caractères
- 3. Comment vérifier si une chaîne contient http: // au début
- 4. regex: Correspondance des parties d'une chaîne lorsque la chaîne contient une partie d'un modèle regex
- 5. Vérifie si une chaîne contient un astérisque (*)
- 6. RegEx pour dire si une chaîne ne contient pas un caractère spécifique
- 7. C# Comment déterminer si HTTPS
- 8. Comment déterminer si une chaîne est JSON valide?
- 9. Comment trouver si une chaîne Java contient X ou Y et contient Z
- 10. Regex pour déterminer si une chaîne commence avec plus d'une lettre majuscule
- 11. Comment savoir si ma chaîne contient le caractère "micro" Unicode?
- 12. Regex: Comment faire correspondre une chaîne qui contient un motif répété?
- 13. Comment utiliser regex pour une partie de chaîne en C#
- 14. C# Regex match de chaîne partielle
- 15. Comment puis-je déterminer si une collection d'entités contient plusieurs valeurs possibles?
- 16. La chaîne mallocée contient des valeurs parasites
- 17. Déterminer si une ressource existe dans ResourceManager
- 18. Si textBox1 contient un entier
- 19. Déterminer le codage d'une chaîne en C#
- 20. Comment puis-je déterminer si une liste est juste une chaîne ou une liste de chaînes?
- 21. Regex pour vérifier une chaîne
- 22. Utilisation de Regex pour modifier une chaîne en C#
- 23. Comment déterminer si un caractère est une lettre en Java?
- 24. Comment puis-je vérifier si une chaîne contient un nombre inférieur à un nombre entier?
- 25. Comment vérifier Un tableau de chaînes contient une chaîne particulière?
- 26. Comment couper une partie d'une chaîne avec une regex?
- 27. déterminer si une autre application est occupée
- 28. requête sql pour la chaîne contient en C#
- 29. Comment déterminer si XML est bien formé?
- 30. C# regex ne correspond qu'à des parties de mots complets dans une chaîne
DOUCE! Merci! En passant, est-ce que remercier les gens dans les commentaires dans l'étiquette ici, ou est-ce considéré comme un bruit inutile? – JCCyC
Je pense que les commentaires sont bien :) Heureux que je pourrais aider –
Je suis tombé sur cette méthode quand j'ai fait un plongeon profond sur le moteur d'expressions régulières de .net: http://www.moserware.com/2009/03/how-net-regular -expressions-really-work.html –