Удалите подстроку из каждой строки текстового файла с помощью регулярного выражения - PullRequest
2 голосов
/ 17 апреля 2019

Текстовый файл (file.txt) выглядит так:

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

Желаемый вывод: 1) исключение цифр в начале строки и 2) удаление пунктуации:

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

Я пытался:

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

Но я получаю результаты только на уровне слов, а не на уровне строк:

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

Ответы [ 4 ]

2 голосов
/ 17 апреля 2019

Не используйте модуль re в цикле for. Возможностей использования регулярных выражений много, и модуль re также можно использовать в качестве многострочного. Например, используйте следующее:

>>> 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', a, flags=re.M)
'First line.\nSecond line \nThird line\nFourth line\nLine. \nLine'
1 голос
/ 17 апреля 2019

Разделение в этой строке

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

разбивает файл по пробелам. Используйте

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

вместо того, чтобы разбить файл на строки.

1 голос
/ 17 апреля 2019

Другой вариант:

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));

возвращается:

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

Он не должен проходить через каждую строку.

1 голос
/ 17 апреля 2019

Вы можете исправить свой текущий код, используя

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

См. Демоверсию Python .

Вам нужно открыть файл и прочитать его построчно. Затем шаблон ^[0-9]+\.?\s* ищет 1 или более цифр ([0-9]+), за которыми следует необязательный . (\.?), а затем 0+ пробелов (\s*) в каждой строке и удаляет совпадение, если оно найдено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...