J'ai une chaîne avec laquelle je veux remplacer tout caractère qui n'est pas un caractère standard ou un nombre tel que (az ou 0-9) par un astérisque. Par exemple, "h ^ & ell`., | Ow] {+ orld" est remplacé par "h * ell * o * w * orld". Notez que plusieurs caractères tels que "^ &" sont remplacés par un astérisque. Comment pourrais-je procéder?
100
Réponses:
Regex à la rescousse!
Exemple:
la source
re.sub("[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+", " ", ":%# unicode ΣΘΙП@./\n")
import re; regex = re.compile('[^0-9a-zA-Z]+'); regex.sub('*', 'h^&ell.,|o w]{+orld')
\W
pour les caractères autres que des mots, c'est presque la même chose mais permet le trait de soulignement comme caractère de mot (je ne sais pas pourquoi): docs.python.org/3.6/library/re.html#index-32La voie pythonique.
Cela ne concerne pas le regroupement de plusieurs caractères consécutifs non correspondants, c'est-à-dire
"h^&i => "h**i
pas"h*i"
comme dans les solutions regex.la source
Essayer:
en Python3:
Edit: réalisé que l'OP veut remplacer les non-caractères par '*'. Ma réponse ne correspond pas
la source
Utilisez
\W
ce qui équivaut à[^a-zA-Z0-9_]
. Consultez la documentation, https://docs.python.org/2/library/re.htmlmise à jour: cette solution exclura également le trait de soulignement. Si vous voulez que seuls les alphabets et les nombres soient exclus, alors la solution par nneonneo est plus appropriée.
la source
\W
équivaut[^a-zA-Z0-9_]
uniquement à Python 2.x. En Python 3.x,\W+
équivaut à[^a-zA-Z0-9_]
seulement sire.ASCII
/re.A
flag est utilisé.