Есть небольшой текстовый файл, в котором встречаются такие проблемы:
- пустые строки
- множественные пробелы между словами
- пробелы перед знаками препинания
- отсутствие пробелов после знаков препинания
В тексте также могут быть ссылки (
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
А теперь вопрос: как изменить регулярные выражения, чтобы пропускались ссылки, даты и время?