2
votes

Supprimer la sous-chaîne de chaque ligne de fichier texte avec regex

Le fichier texte ( file.txt ) ressemble à ceci:

['First', 'line.', 'Second', 'line', 'Third', 'line', 'Fourth', 'line', 'Line.', 'Line']

La sortie souhaitée est 1) éliminer les nombres en début de ligne et 2) supprimer la ponctuation:

import re
file=open("file.txt").read().split()
print([i for i in file if re.sub("[0-9]\.*", "", i)])

J'ai essayé:

First line.
Second line
Third line
Fourth line
Line.
Line

Mais j'obtiens des résultats uniquement au niveau du mot plutôt qu'au niveau de la ligne:

First line.
2. Second line 
03 Third line
04. Fourth line
5. Line. 
6 Line


0 commentaires

4 Réponses :


1
votes

Vous pouvez corriger votre code actuel en utilisant

with open("file.txt") as f:
    for line in f:
        print(re.sub("^[0-9]+\.?\s*", "", line.rstrip("\n")))

Voir une Démo Python a >.

Vous devez ouvrir un fichier et le lire ligne par ligne. Ensuite, le modèle ^ [0-9] + \.? \ S * recherche un ou plusieurs chiffres ( [0-9] + ) suivi d'un . ( \.? ) puis 0+ espaces blancs ( \ s * ) sur chaque ligne et supprime la correspondance si elle est trouvée.


0 commentaires

1
votes

La division de cette ligne

file=open("file.txt").read().split("\n")

divise le fichier par des espaces. Utilisez plutôt

file=open("file.txt").read().split()

pour diviser le fichier par lignes.


1 commentaires

Voir également docs.python.org/3.7/library/stdtypes.html# str.split pour pouvoir accéder à des solutions comme celle-ci. str.splitlines () est également pertinent.



1
votes

Une autre option est:

First line.
Second line
Third line
Fourth line
Line.
Line

il renvoie:

import re
f = """First line.
2. Second line
03 Third line
04. Fourth line
5. Line.
6 Line"""
print(re.sub(r"(\d{1,2}\.{,1}\s)", "", f));

Il n'est pas nécessaire de parcourir chaque ligne. p >


0 commentaires

2
votes

N'utilisez pas le module re dans la boucle pour . Les possibilités d'utilisation des regex sont nombreuses et le module re peut également être utilisé comme une multiligne. Par exemple, utilisez ce qui suit:

>>> with open('/tmp/file.txt', 'r') as f:
        s = f.read()
>>> # or use direct value to test in the Python console:
>>> s = """First line.
... 2. Second line
... 03 Third line
... 04. Fourth line
... 5. Line.
... 6 Line"""

>>> s
'First line.\n2. Second line \n03 Third line\n04. Fourth line\n5. Line. \n6 Line'

>>> import re

>>> re.sub(r'[0-9\.\s]*(.*)', r'\1\n', s, flags=re.M)
'First line.\nSecond line \nThird line\nFourth line\nLine. \nLine\n'

>>> re.sub(r'^[0-9\.\s]*(.*)', r'\1', s, flags=re.M)
'First line.\nSecond line \nThird line\nFourth line\nLine. \nLine'


0 commentaires