Python регулярное выражение для поиска строки, заканчивающейся двойной новой строкой без точки - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть такая длинная строка:

Page Content

Director, Research Center.

Director of Research, Professor

Researcher

Строки заканчиваются двойным переводом строки. Некоторые содержат период в конце, некоторые нет. Я хочу, чтобы каждая строка с двойной новой строкой содержала один период и одну новую строку, например:

Page Content.
Director, Research Center.
Director of Research, Professor.
Researcher.

Существуют также строки, заканчивающиеся точкой и одной новой строкой, и они должны оставаться так они и есть. То, что я пробовал:

re.sub('(?!\.)\n\n', '.\n', text)

То, что я пытаюсь сделать, - это отрицание на период, за которым следуют две новые строки, или нахождение каждой двойной двойной новой строки, которая не имеет периода непосредственно перед этим, и замените его точкой и одной новой строкой.

Я пробовал некоторые другие варианты, но я всегда получаю либо двойной период, либо никаких изменений.

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Вместо этого вы можете использовать отрицательный взгляд сзади, чтобы утверждать, что слева не точка. Избегайте точки \., чтобы буквально соответствовать ей.

(?<!\.)\n\n

Regex demo

Или для сопоставления с необязательным \r вы можете использовать квантификатор для повторения группа без захвата:

(?<!\.)(?:\r?\n){2}

Regex demo

1 голос
/ 14 апреля 2020

Не очень элегантно, но, очевидно, работает:

text = text.replace('.\n\n', '\n\n').replace('\n\n', '.\n')

Если вы настаиваете на использовании re.sub:

text = re.sub('([^.])\.?\n\n', r'\1.\n', text)

Это ужасно, но работает тоже.

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