разделить новую строку, кроме цифры в файле Unicode - PullRequest
0 голосов
/ 28 мая 2018

У меня есть utf_8 .txt файл: greek.txt

Blessed is a Man

1. μακάριος
ανήρ
2. ότι
γινώσκει
κύριος

Я хотел бы получить: greek_r.txt

Blessed is a Man

1. μακάριος ανήρ
2. ότι γινώσκει κύριος

Я использовал

# -*- coding: utf-8 -*-
import io
import re
f1 = io.open('greek.txt','r',encoding='utf8')
f2 = io.open('greek_r.txt','w',encoding='utf8')

for line in f1:
    f2.write(re.sub(r'\n((?=^[^\d]))', r'\1', line))

f1.close()
f2.close()

но не работает, есть идеи?

1 Ответ

0 голосов
/ 28 мая 2018

Вы читаете входной файл построчно, таким образом, ваше регулярное выражение не может «видеть» между строками, \n - последний символ в каждой строке, а (?=^[^\d]) просто не имеет смысла, так как требует начала следующей строкис символом, отличным от цифры.

Используйте что-то вроде:

import re, io
with io.open('greek.txt','r',encoding='utf8') as f1:
    with io.open('greek_r.txt','w',encoding='utf8') as f2:
        f2.write(re.sub(r'\r?\n(\D)', r' \1', f1.read()))

\r? добавляется для соответствия необязательному символу CR (если разрыв строки выполнен в стиле Windows).r'\r?\n(\D)' можно заменить на r'(?u)\r?\n([^\W\d_])', чтобы соответствовать только разрыву строки, за которым следует буква ([^\W\d_] соответствует любому символу, кроме не-слова, цифры и _ символов,т.е. любая буква).(?u) - это встроенная версия модификатора re.U, соответствующая любой букве Юникода в Python 2.x (в Python 3 она используется по умолчанию).

Вывод:

Blessed is a Man

1. μακάριος ανήρ
2. ότι γινώσκει κύριος
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...