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
3 Réponses :
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.
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.
Vous pouvez remplacer les correspondances de l'expression régulière
r' +'
par une chaîne vide.
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.
\ 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 /… ??