Как использовать регулярные выражения для поиска многоточия?
#Имеем текст
text = '''Шла Саша, значит, по шоссе и сосала... сушку!'''
#Имеем функцию, которая возвращает подстроку из строки,
#Принимающая след.значения: текст[text]; номер первого элемента
#подстроки[start]; Длину подстроки[size].
#Вне зависимости от размера size подстрока не должна обрываться.
#Она должна обязательно оканчиваться на знак препинания. Любой.
#То есть многоточие не должно обрываться, а должно полностью войти в подстроку.
#Либо поиск [i-1] знака препинания должен "шагать" дальше,
#пока "не упрется" в запятую.
def func(text: str, start: int, size: int) -> tuple(str, int):
result = re.findall([регулярное выражение для поиска], text)
print(result)
symbols = ('.', ',', ':', ';', '!', '?')
end = min(start + size, len(text))
for i in range(end, start, -1):
if text[i-1] in symbols or text[i-1] == result:
page = text[start:i].rstrip()
return page, len(page)
#Вывод подстроки и её длинны.
print(func(text, 0, 37), sep='\n')
Прошу помочь!)))
Ответы (1 шт):
Автор решения: Daniil Loban
→ Ссылка
Точка это спецсимвол регулярки обозначающий любой символ, поэтому нужно либо так [.]{3} в скобках символы не нуждаются в экранировании {3} - длина, либо так \.\.\. тут мы экранируем точки \ таким образом они воспринимаются уже как обычный символ точки.
import re
text = "Шла Саша, значит, по шоссе и сосала... сушку!"
matches = re.finditer(r"\.\.\.", text, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Найдено {matchNum} в позиции {start}-{end}: {match}"
.format(matchNum = matchNum, start = match.start(),
end = match.end(), match = match.group()))
# Найдено 1 в позиции 35-38: ...