Ищем шаблон регулярных выражений для захвата фраз до точки - PullRequest
1 голос
/ 12 апреля 2019

У меня такой длинный текст:

text = 'Quisiera yo detectar los puntos... pero solo los puntos aislados. Los puntos suspensivos no los quiero detectar. A eso me refiero.'

, и я хочу получить такой вывод:

phrases = ['Quisiera yo detectar los puntos... pero solo los puntos aislados.',
' Los puntos suspensivos no los quiero detectar.',
' A eso me refiero.']

Проблема в трех точках в первой фразе.Я не могу найти регулярное выражение, которое отличает их от обычного разделителя из одной точки.Есть ли способ достичь этого с помощью регулярных выражений?

Ответы [ 3 ]

5 голосов
/ 12 апреля 2019

Вы хотите обрабатывать .. (или ... и т. Д.) По-другому и комбинировать его с отрицательным взглядом:

(?:[^.]|\.{2,})+\.

Пояснение:

  • (?:[^.]|\.{2,})+ будет соответствовать любой строке, состоящей из не . символов или групп из 2 или более . s
  • \. требуется период, конечно же

Вот демо .

3 голосов
/ 12 апреля 2019

Вы можете использовать положительный вид сзади, чтобы разделить только пробел, которому не предшествует более одной точки. Этот подход будет игнорировать любую последовательность из 2 или более точек.

Например:

import re

s = 'Quisiera yo detectar los puntos... pero solo los puntos aislados. Los puntos suspensivos no los quiero detectar. A eso me refiero.'

sentences = re.split(r'(?<=[^.]\.)\s', s)
print(sentences)
# ['Quisiera yo detectar los puntos... pero solo los puntos aislados.', 'Los puntos suspensivos no los quiero detectar.', 'A eso me refiero.']
1 голос
/ 12 апреля 2019

Попробуйте это ...

import re

text = 'Quisiera yo detectar los puntos... pero solo los puntos aislados. Los puntos suspensivos no los quiero detectar. A eso me refiero.'

pattern = r"(?<=\.)\s(?=[A-Z])"
re.split(pattern, text)

Результат должен быть ...

['Quisiera yo detectar los puntos... pero solo los puntos aislados.',
 'Los puntos suspensivos no los quiero detectar.',
 'A eso me refiero.']

Мой ответ основан на этот SO ответ .

Обновление:
Просматривая некоторые ответы, используя тег regex, я натолкнулся на эту метадискуссию , а также на этот ответ .Мой ответ пришел не из врожденного знания регулярных выражений, а из-за того, что я потратил около 17 минут на поиски в поиске различных терминов поиска и переполнение стека.Через 17 минут или около того мне потребовалось придумать ответ, появились два других ответа.
Я понял, что мой ответ был скорее «покажи мне код», чем «научи человека ловить рыбу».Подводя итог моим чувствам, я бы сказал, что когда я остро нуждаюсь в помощи, я хочу, чтобы кто-то показал мне код.Но способность искать решения проблем - это важный навык, но также и ужасный наркотик.Надеюсь, мое решение помогло, но я также настоятельно рекомендую проверить ссылки в моем обновлении.Во всяком случае, для перспективы относительно состояния тега regex и о том, как сделать переполнение стека более значимым.

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