C# - Trouver et supprimer les sous-chaîne à partir d'une liste de chaînes
J'ai un mauvais mot de la liste. Si une chaîne contient tout de l'élément/des éléments de la mauvaise liste de mots, j'ai besoin d'enlever cette mauvaise parole de la chaîne.
List<string> badWordList = new List<string> { "email:", "index", "mobile:", "fax:", "web" };
Je suis en mesure de rechercher la chaîne de caractères, mais ne peut pas supprimer. Merci de m'aider...j'ai essayé le code ci-dessous:
string myText = "email:[email protected]";
if (badWordList.Any(w => myText.IndexOf(w, StringComparison.OrdinalIgnoreCase) >= 0))
{
//How to remove
}
Ci-dessous est l'ensemble de l'entrée de la sortie attendue:
-
i/p - email:[email protected]
o/p - [email protected]
-
i/p - Jack F. Mobile:89788987
o/p - Jack F. 89788987
-
i/p - Jack F. Email:[email protected] mobile:65777 WEB
o/p - Jack F. [email protected] 65777
Je préfère un non-regex approche. Merci pour votre aide.
- Aucun problème avec les Regex? C'est toujours plus rapide et plus pratique.
myText = myText.Replace(badWordList.First(i => myText.IndexOf(w, StringComparison.OrdinalIgnoreCase) >= 0), "");
Généralement, si c'est en allant à la poignée de l'entrée utilisateur, assurez-vous qu'il ne sera pas.- Pas de problème avec la Regex.
- Les réponses ne doivent pas être mis dans un commentaire, toutefois simple, la réponse est que c'est une réponse.
- Ce n'est pas une solution car il échouera dans de nombreux cas, de ne pas être utile pour les futurs lecteurs.
- double possible de Supprimer la sous-chaîne à partir d'une liste de chaînes de caractères
Vous devez vous connecter pour publier un commentaire.
Vous pouvez itérer sur les gros mots et les supprimer:
Être conscient, cependant, que cette approche est sensible à la casse, c'est à dire qu'il va supprimer "email:" mais pas "EMAIL:".
Si vous avez besoin d'un casse solution, l'approche la plus simple est d'utiliser une Regex:
Vous pouvez supprimer des chaînes de caractères en les remplaçant par une chaîne vide:
Unfortulately ce est sensible à la casse. Pour la casse de la chaîne à remplacer sans expressions régulières, consultez Est-il insensible à la casse de la chaîne de remplacer dans .Net sans l'aide de Regex?
Vous pouvez aussi le faire avec une expression régulière, auquel cas la comparaison sensible à la casse vient "gratuitement":
Remplacer l'occurrence de la "mauvaise parole" avec
string.Empty
: -IndexOf
vérification est inutile, puisque la.Replace
ne remplacera pas n'importe quoi, sistring
donné qu'il n'existe pas dans l'autre de la chaîne.si elle est sensible à la casse :