web-dev-qa-db-fra.com

Comment supprimer des caractères spéciaux sauf l'espace d'un fichier en python?

J'ai un énorme corpus de texte (ligne par ligne) et je souhaite supprimer les caractères spéciaux tout en maintenant l'espace et la structure de la chaîne. 

hello? there A-Z-R_T(,**), world, welcome to python.
this **should? the next line#followed- by@ an#other %million^ %%like $this.

devrait être

hello there A Z R T world welcome to python
this should be the next line followed by another million like this
6
pythonlearn

Vous pouvez également utiliser ce modèle avec regex:

import re
a = '''hello? there A-Z-R_T(,**), world, welcome to python.
this **should? the next line#followed- by@ an#other %million^ %%like $this.'''

for k in a.split("\n"):
    print(re.sub(r"[^a-zA-Z0-9]+", ' ', k))
    # Or:
    # final = " ".join(re.findall(r"[a-zA-Z0-9]+", k))
    # print(final)

Sortie:

hello there A Z R T world welcome to python 
this should the next line followed by an other million like this 

Modifier:

Sinon, vous pouvez stocker les dernières lignes dans une list:

final = [re.sub(r"[^a-zA-Z0-9]+", ' ', k) for k in a.split("\n")]
print(final)

Sortie:

['hello there A Z R T world welcome to python ', 'this should the next line followed by an other million like this ']
11
Chiheb Nexus

Je pense que nfn neil answer est génial ... mais je voudrais juste ajouter une regex simple pour supprimer tous les caractères sans mots, mais il faudra considérer le soulignement dans le cadre du mot

print  re.sub(r'\W+', ' ', string)
>>> hello there A Z R_T world welcome to python
1
Eliethesaiyan

Créer un dictionnaire mappant des caractères spéciaux sur Aucun

d = {c:None for c in special_characters}

Créez une table translation à l'aide du dictionnaire. Lire le texte entier dans une variable et utiliser str.translate sur tout le texte.

0
wwii