1
votes

Comment supprimer plusieurs espaces dans chaque ligne et les remplacer par un seul espace?

Je suis nouveau dans le domaine des scripts et j'essaie de supprimer plusieurs espaces dans une ligne et de le remplacer par un seul espace.

input.txt

Hello world Welcome to python

la sortie doit être comme

with open ('input.txt', 'r') as i_f, open ('output.txt', 'w') as o_f:
    for line in i_f:
        o_f.write(re.sub('\s+',' ', line))

J'ai suivi la commande ci-dessous

Hello world
Welcome to python

Ma sortie est quelque chose comme

Hello     world
Welcome     to     python


4 commentaires

\ s considère la nouvelle ligne comme un caractère d'espacement.


Utilisez simplement '+' au lieu de '\ s +'


En regardant simplement votre ligne `o_f.write (re.sub ('\ s +', '', line))` qui semble que cela devrait fonctionner, quel résultat en retirez-vous?


stackoverflow .com / questions / 35838690 /… ??


3 Réponses :


0
votes

Ajoutez un caractère de nouvelle ligne à la fin de chaque ligne que vous écrivez.

Ou vous pouvez modifier votre expression régulière pour ne faire correspondre que les espaces (par opposition à tout caractère d'espacement) ou tout autre sous-ensemble de caractères d'espaces que vous souhaitez consolider.


0 commentaires

0
votes

Votre problème est dû au fait que \ s correspond à n'importe quel caractère d'espacement, et le caractère de nouvelle ligne à la fin de chaque ligne compte comme un espace.

Puisqu'il n'y a pas de caractère abrégé en Python pour les caractères d'espacement à l'exclusion des retours à la ligne, vous devez indiquer explicitement les caractères d'espacement que vous voulez faire correspondre:

with open ('input.txt', 'r') as i_f, open ('output.txt', 'w') as o_f:
    for line in i_f:
        # Match only tabs and spaces
        o_f.write(re.sub('[\t ]+',' ', line))

Si vous allez travailler avec des expressions régulières, je vous recommande fortement ce tutoriel . C'est fantastique.


0 commentaires

0
votes

Vous pouvez remplacer les correspondances de l'expression régulière

r' +'

par une chaîne vide.

Démarrez votre moteur!

J'ai supposé que tous les espaces à la fin de la chaîne devaient également être supprimés. Si les espaces à la fin de la chaîne doivent être remplacés par un seul espace, utilisez:

r' (?= )'

ou remplacez les correspondances de

r' (?= |$)'

avec un espace.


0 commentaires