@Spirkaa
Чуть-чуть пишу на python 3

Как пропускать ссылки, даты и время при обработке текста с помощью регулярных выражений?

Есть небольшой текстовый файл, в котором встречаются такие проблемы:
  • пустые строки
  • множественные пробелы между словами
  • пробелы перед знаками препинания
  • отсутствие пробелов после знаков препинания

В тексте также могут быть ссылки (http://www.youtube.com), дата (03.12.2014) и время (9:20)

Я обрабатываю текст таким скриптом на python3, который я собрал с помощью google:
import os
import sys
import re

msg_file = sys.argv[1]
msg_path, msg_name = os.path.split(msg_file)
title, ext = os.path.splitext(msg_name)
file_name_with_ext = title + '_processed' + ext
processed_msg_path = os.path.join(msg_path, file_name_with_ext)

# Пробелы перед знаками препинания
s1 = re.compile('\s+(?=[\.,:;!\?])')

# Пробел после знаков препинания и множественные пробелы
s2 = re.compile('(?<=[\.,:;!\?])(?![\.,:;!\?\s])|\s+')

# Открываем файл
with open(msg_file, encoding='utf-8') as msg_body:
    # Применяем регулярные выражения
    msg_body = [s2.sub(' ', s1.sub('', line)).strip() for line in msg_body]
    # Создаем список(фильтруем пустые строки)
    msg_body = list(filter(None, msg_body))

# Объединяем список в строку
result = '\n'.join(msg_body)

# Создаем новый файл
with open(processed_msg_path, 'w+', encoding='utf-8') as processed_msg_file:
    # Записываем результат в новый файл
    processed_msg_file.write(result)

Со всеми перечисленными проблемами он справляется на ура!

Но также скрипт расставляет пробелы после знаков там, где это не нужно:
http: //www. youtube. com
03. 12. 2014
9: 20

А теперь вопрос: как изменить регулярные выражения, чтобы пропускались ссылки, даты и время?
  • Вопрос задан
  • 2376 просмотров
Пригласить эксперта
Ответы на вопрос 1
Jaty4
@Jaty4
я конечно не разбираюсь в питоне но что то мне подсказывает, что проблема кроется в этой строке
msg_body = [s2.sub(' ', s1.sub('', line)).strip() for line in msg_body]

обратите внимание на s2.sub(' ', на сколько я понимаю вы там сами ставите пробел
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы