J'ai un code quelque chose comme ça:
#incredible
Voici le résultat:
punctuation_chars = ["'", '"', ",", ".", "!", ":", ";", '#', '@'] def strip_punctuation(str_word): for char in str_word: if char in punctuation_chars: new_word = str_word.replace(char,'') return new_word print(strip_punctuation("#inc.red.ible"))
Par exemple, dans ce code ci-dessus, je ne pouvais pas supprimer ce char pointu ou @ char par la méthode replace. Je me demande pourquoi cela se produit uniquement avec ces caractères.
3 Réponses :
salut je pense que cela devrait résoudre votre problème:
def strip_punctuation(str_word): for char in str_word: if char in punctuation_chars: str_word = str_word.replace(char,'') return str_word
Vous lisez à chaque fois str_word
, même si vous avez déjà effectué d'autres modifications et les new_word
enregistrées dans new_word
. Assurez-vous que vous appliquez des modifications successives à la même chaîne. Par exemple:
punctuation_chars = ["'", '"', ",", ".", "!", ":", ";", '#', '@'] def strip_punctuation(str_word): for char in str_word: if char in punctuation_chars: str_word = str_word.replace(char,'') return str_word print(strip_punctuation("#inc.red.ible"))
Vous pouvez résoudre ce problème avec la puissance de regex!
Utilisez la méthode sub
du module re
intégré:
incredible
Production:
import re punctuation_chars = ["'", '"', ",", ".", "!", ":", ";", '#', '@'] def strip_punctuation(str_word): return re.sub('\\'+'|\\'.join(punctuation_chars), '', str_word) print(strip_punctuation("#inc.red.ible"))