Дочка мыла раму

Дочка мыла раму




🛑 ПОДРОБНЕЕ ЖМИТЕ ЗДЕСЬ 👈🏻👈🏻👈🏻

































Дочка мыла раму

Мама мыла раму!
Если эта дамочка уже была мамой, то вряд ли бы ее сын или дочка вечером бы ей прочитали известные строки из букваря. Уж больна молода.
Центр города, девятиэтажный дом, на четвертом этаже девушка моет раму, окно, протирает стекла. Окна мыть нужно. В прошлые времена старые советские деревянные рамы худо-бедно открывались, иногда даже закрывались плотно, без оставления щелей, но мыть их было удобно.
Сегодня в веке пластиковых окон у многих возникают трудности. Пластиковые окна, несмотря на многие недостатки, о которых не станем сегодня упоминать, пока в российском обществе не нашли себе достойных конкурентов. Красиво, удобно, не надо заклеивать на зиму, не промерзают зимой, хорошо держат тепло в жилье. Но для среднего российского человека они все же дороговаты. Чтобы удешевить, одну створку делают глухой. И чтобы снаружи помыть эту глухую створку на этажах выше первого, нужны технологии.
Этой девушке нипочем высота четвертого этажа, она легко порхала по подоконнику, тряпочка, или губка, или еще что-то мелькала в ее руке.
Мужики, даже те, у кого остеохондроз давно уже сковал шейные позвонки, проходили мимо и надолго задирали головы лицом вверх. А что, там было на что посмотреть, крохотные шортики, маечка, и все что должно было быть округлым, было округлым. Красота.
— Ой!!!
Раздалось многоголосое «Ой!».
Я в предчувствие страшного обернулся, поднял глаза, девушка была не только смелой, но и озорной, она была привязана, и чтобы напугать глазевших на нее, сделала вид что срывается. А сама откинувшись на веревке махала стоящим внизу ручкой.
Я огляделся, вроде никого сердечный приступ наземь не опрокинул. Никому скорая помощь не понадобилась. а если и понадобится, то не экстренно. Ан нет, вон дедуля присел, за сердце держится словно бокорезы в плоть живую сердца впились. Эх, дедушка, и надо тебе было молодыми телесами любоваться. Нет встал, пошел, пошел ровно, не пошатывается, значит все нормально.


© Copyright: Геннадий Локтев , 2021
Свидетельство о публикации №221020801634




Авторы  
Произведения  
Рецензии  
Поиск  
Магазин  
Вход для авторов  
О портале   
Стихи.ру  
Проза.ру

Портал Проза.ру предоставляет авторам возможность свободной публикации своих литературных произведений в сети Интернет на основании пользовательского договора . Все авторские права на произведения принадлежат авторам и охраняются законом . Перепечатка произведений возможна только с согласия его автора, к которому вы можете обратиться на его авторской странице. Ответственность за тексты произведений авторы несут самостоятельно на основании правил публикации и законодательства Российской Федерации . Данные пользователей обрабатываются на основании Политики обработки персональных данных . Вы также можете посмотреть более подробную информацию о портале и связаться с администрацией .
Ежедневная аудитория портала Проза.ру – порядка 100 тысяч посетителей, которые в общей сумме просматривают более полумиллиона страниц по данным счетчика посещаемости, который расположен справа от этого текста. В каждой графе указано по две цифры: количество просмотров и количество посетителей.
© Все права принадлежат авторам, 2000-2022. Портал работает под эгидой Российского союза писателей . 18+


Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.
#Сначала кладём в переменную string текст строки, по которой ведём поиск.
print (re.sub ( r'[А-ЯЁ]\w*'
r'(?:-[А-ЯЁ]\w*)?'
r'(?: [А-ЯЁ]\w*){2}' , 'N' , string))
#Сначала кладём в переменную string текст строки, по которой ведём поиск.
pattern = re.compile ( r'(?:[Уу]л(?:\.|ица) )?'
r'((?:[А-ЯЁ]\w+)(?: [А-ЯЁ]\w+)*)'
r' (?:дом |д\. )?'
r'(\d+\w?)'
r'[ -](?:квартира |кв\. )?'
r'(\d+)' )

addresses = pattern.findall (text)
for address in addresses:
print (f '{address[0]} {address[1]}-{address[2]}' )
#Сначала кладём в переменную string текст строки, по которой ведём поиск.
pattern = r'\b(\w)\w*.*?\b\1'

match = re.search (pattern, string, flags=re.I)
if match is None :
print ( 'Метод Довлатова соблюдён' )
else :
print ( 'Вы расстроили Сергея Донатовича' )
#Сначала кладём в переменную string текст строки, по которой ведём поиск.
pattern = re.compile ( r'(?:\(\d{4}(?:-\d{4})?\))'
r'|'
r'(?:'
r'(?:\d{4}-)?\d{4} '
r'(?:'
r'(?:год(?:ы|ах|ов)?)'
r'|'
r'(?:гг?\.)'
r')'
r')'
r'|'
r'(?:[IVX]+ век)' )

print (pattern.findall (string))


Договор оферты


Оплата


Правила пользования Платформой
Политика конфиденциальности




Электронная почта
Подписаться
Ошибка в адресе электронной почты


Нажимая на кнопку, я соглашаюсь с политикой обработки персональных данных и принимаю правила пользования Платформой

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

Иллюстрация: Оля Ежак для SKillbox Media

Учись бесплатно: вебинары по программированию, маркетингу и дизайну.
Само словосочетание «регулярные выражения» звучит непонятно и выглядит страшно, но на самом деле ничего сложного в работе с ними нет. В этой статье мы познакомим вас с их логикой и основными принципами и научим разговаривать на языке шаблонов. В хорошем смысле слова.
Представьте, что вы снова в школе, на уроке истории. Вам нужно решить итоговую контрольную работу по всем датам, которые проходили в четверти.
Но тут вас поджидает препятствие: все даты разбросаны по нескольким главам учебника по десятку страниц каждая. Читать полкниги в поисках нужных вам крупиц информации — такое себе удовольствие. Тем более когда каждая минута на счету.
К счастью, вы — человек неглупый (не зря же пошли в IT), тренированный и быстро соображающий. Поэтому моментально замечаете основные закономерности:
Теперь у вас есть шаблон нужной информации. Остаётся лишь пролистать страницу за страницей и записать даты в смартфон (или себе на подкорку). Вуаля: пятёрка за четверть у вас в дневнике, а премия от родителей за отличную учёбу — в кармане.
По такому же принципу работают и регулярные выражения: они ведут поиск фрагментов текста по определённому шаблону. Если фрагмент совпадает с шаблоном — с ним можно работать.
Запишем логику поиска исторических дат в виде регулярных выражений (они ещё называются Regular Expressions, сокращённо regex или regexp). Выглядеть он будет так:
Приятные новости: regex — настолько полезный и мощный инструмент, что поддерживается почти всеми современными языками программирования, в том числе и Python. Причём соответствующий синтаксис в разных языках очень схож. Так что, выучив его в одном языке, можно пользоваться им в других, практически не переучиваясь. Поехали.
С помощью regex можно искать как вполне конкретные выражения (например, слово «век» — последовательность букв «в», «е» и «к»), так и что-то более общее (например, любую букву или цифру).
Для обозначения второй категории существуют специальные символы. Вот некоторые из них:
Важное замечание 1. Регулярные выражения зависимы от регистра, то есть «А» и «а» при поиске будут считаться разными символами.
Важное замечание 2 . Буквы «Ё» и «ё» не входят в диапазон «А — Я» и «а — я». Так что, задавая русский алфавит, их нужно выписывать отдельно.
На экранировании остановимся подробнее. По умолчанию символы .^$*+? {}[]\|() являются спецсимволами — то есть они выполняют определённые функции. Чтобы сделать спецсимволы обычными, их нужно экранировать \ .
Таким образом, . будет обозначать любой символ, а \. — знак точки. Чтобы написать обратный слеш, его тоже нужно экранировать, то есть в регулярных выражениях он будет выглядеть так: \\ .
Обратная ситуация с некоторыми алфавитными символами. По умолчанию они считаются просто буквами, но при экранировании начинают играть роль спецсимволов.
Важное замечание. \ A , \Z, \b и \B указывают не на конкретный символ, а на положение других символов относительно друг друга. Можно сказать, что они указывают на пространство между символами.
Например, регулярное выражение \ b [А-ЯЁаяё]\ b будет искать только те буквы, которые отделены друг от друга пробелами или знаками препинания.
Часто при записи регулярного выражения какая-то часть шаблона должна повторяться определённое количество раз. Число вхождений в синтаксисе regex задают с помощью квантификаторов. Они всегда помещаются после той части шаблона, которую нужно повторить.
Теперь давайте ещё раз посмотрим на наше регулярное выражение для поиска дат по учебнику истории:
В нём есть несколько дополнительных символов, о которых рассказано ниже, но начинка этого выражения уже понятна.
Попрактиковаться в составлении регулярных выражений можно на сайте regex101.com . А мы разберём основные приёмы их использования и решим несколько задач.
Уточним ещё несколько терминов regex.
Регулярные выражения — это инструмент для работы со строками, которые и являются основной их единицей.
Строка представляет собой как само регулярное выражение, так и текст, по которому ведётся поиск.
Найденные в тексте совпадения с шаблоном называются подстроками. Например, у нас есть регулярное выражение м. (буква «м», затем любой символ) и текст «Мама мыла раму». Применяя регулярное выражение к тексту, мы найдём подстроки «ма», «мы» и «му». Подстроку «Ма» наше выражение пропустит из-за разницы в регистре.
Есть и более мелкая единица, чем подстрока, — группа. Она представляет собой часть подстроки, которую мы попросили выделить специально. Группы выделяются круглыми скобками (…) .
Возьмём ту же строку «Мама мыла раму» и применим к ней следующее регулярное выражение:
Оно значит: буквенный символ, выделенный группой, и за ним ещё три буквенных символа, также выделенных группой. Итого весь шаблон представляет собой четыре буквенных символа.
В нашем тексте это выражение найдёт три совпадения, в каждом из которых выделит две группы:
Это помогает извлечь из найденной подстроки конкретную информацию, отбросив всё остальное. Например, мы нашли адрес, состоящий из названия улицы, номера дома и номера квартиры. Подстрока будет представлять собой адрес целиком, а в группы можно поместить отдельно каждый его структурный элемент — и потом обращаться к нему напрямую.
Группам можно давать имена с помощью такой формы: (? P…)
Вот так будет выглядеть наш шаблон, ищущий четырёхбуквенные слова, если мы дадим имена группам:
Уберём группы и упростим регулярное выражение, чтобы оно искало только подстроку:
Немного изменим текст, по которому ищем совпадения: «Мама мыла раму, а папа был на пилораме, потому что работает на лесопилке».
Регулярное выражение ищет четыре буквенных символа подряд, поэтому в качестве отдельных подстрок находит также «пило», «раме», «рабо», «тает», «лесо» и «пилк».
Исправьте регулярное выражение так, чтобы оно находило только четырёхбуквенные слова. То есть оно должно найти подстроки «мама», «мыла», «раму» и «папа» — и ничего больше.
Подсказка, если не можете решить задачу
Важное замечание. При написании regex нужно помнить, что они ищут только непересекающиеся подстроки. Под шаблон \w{4} в слове «работает» подходят не только подстроки «рабо» и «тает», но и «абот», «бота», «отае». Их регулярное выражение не находит, потому что тогда бы эти подстроки пересеклись с другими — а в regex так нельзя.
Нередко при использовании регулярных выражений требуется применить квантификатор либо логическое ИЛИ не к отдельному символу, а к целой группе. Именно так мы поступили в нашем шаблоне для поиска дат по учебнику истории:
С помощью скобок мы сказали: выдайте совпадение, если в тексте присутствует хотя бы один из двух вариантов — либо год, либо век.
Важное замечание. ? : в начале группы означает, что мы просим regex не запоминать эту группу. Если все группы открываются символами ? : , то регулярные выражения вернут только подстроку и ни одной группы.
В Python это может быть полезно, потому что некоторые re-функции возвращают разные результаты в зависимости от того, запомнили ли регулярные выражения какие-то группы или нет.
Также к группам удобно применять квантификаторы. Например, имена многих дроидов в «Звёздных войнах» построены по принципу: буква — цифра — буква — цифра.
Особенно полезно использовать незапоминаемые группы со сложными шаблонами.
Чтобы работать с регулярными выражениями в Python, необходимо импортировать модуль re :
Это даёт доступ к нескольким функциям. Вот их краткое описание.
Важное замечание. Напоминаем, что регулярные выражения по умолчанию ищут только непересекающиеся подстроки.
Для написания регулярных выражений в Python используют r-строки (их называют сырыми, или необработанными). Это связано с тем, что написание знака \ требует экранирования не только в регулярных выражениях, но и в самом Python тоже.
Чтобы программистам не приходилось экранировать экранирование и писать нагромождения обратных слешей, и придумали r-строки. Синтаксически они обозначаются так:
Перечислим самые популярные из них.
Находит совпадение только в том случае, если соответствующая шаблону подстрока находится в начале строки, по которой ведётся поиск:
Как видим, поиск по шаблону «Мама» нашёл совпадение и вернул Match-объект. Слово же «мыла», хотя и есть в строке, находится не в начале. Поэтому регулярное выражение ничего не находит и возвращается None.
При этом re.search возвращает только первое совпадение, даже если в строке, по которой ведётся поиск, их больше. Проверим это:
Возвращает итератор с объектами, к которым можно обратиться через цикл:
Эта функция очень полезна, если вы хотите получить Match-объект для каждого совпадения.
В Match-объектах хранится много всего интересного. Посмотрим внимательнее на объект с подстрокой «Мама», который нашла функция re.match:
span — это индекс начала и конца найденной подстроки в тексте, по которому мы искали совпадение. Обратите внимание, что второй индекс не включается в подстроку.
match — это собственно найденная подстрока. Если подстрока длинная, то она будет отображаться не целиком.
Это, конечно же, не всё, что можно получить от Match-объекта. Рассмотрим ещё несколько методов.
Возвращает найденную подстроку, если ему не передавать аргумент или передать аргумент 0. То же самое делает обращение к объекту по индексу 0:
Если регулярное выражение поделено на группы, то, начиная с единицы, можно вызвать группу отдельно от строки:
Если группы поименованы, то в качестве аргумента метода group можно передавать их название:
Если одна и та же группа соответствует шаблону несколько раз, то в группу запишется только последнее совпадение:
Возвращает кортеж с индексом начала и конца подстроки в исходном тексте. Если мы хотим получить только первый индекс, можно использовать метод start , только последний — end :
Возвращает просто список совпадений. Никаких Match-объектов, к которым нужно дополнительно обращаться:
Функция ведёт себя по-другому, если в регулярном выражении есть деление на группы. Тогда функция возвращает список кортежей с группами:
Аналог метода str.split . Делит исходную строку по шаблону, а сам шаблон исключает из результата:
re.split также имеет дополнительный аргумент maxsplit — это максимальное количество частей, на которые функция может поделить строку. По умолчанию maxsplit равен нулю, то есть не устанавливает никаких ограничений:
Если в re.split мы указываем группы, то они попадают в список строк в качестве отдельных элементов. Для наглядности поделим исходную строку на слог «па»:
Требует указания дополнительного аргумента в виде строки, на которую и будет заменять найденные совпадения:
Дополнительные возможности у функции появляются при применении групп. В качестве аргумента замены ему можно передать не строку, а ссылку на номер группы в виде \n . Тогда он подставит на нужное место соответствующую группу из шаблона. Это очень удобно, когда нужно поменять местами структурные элементы в тексте:
Используется для ускорения и упрощения кода, когда одно и то же регулярное выражение применяется в нём несколько раз. Её синтаксис выглядит так:
Нередко в регулярных выражениях нужно учесть сразу много вариантов и опций, из-за чего их структура усложняется. А regex даже простые и короткие читать нелегко, что уж говорить о длинных.
Чтобы хоть как-то облегчить чтение регулярок, в Python r-строки можно делить точно так же, как и обычные. Возьмём наше выражение для поиска дат по учебнику истории:
Его же можно написать вот в таком виде:
Часто при написании регулярных выражений приходится использовать квантификаторы, охватывающие диапазон значений. Например, \d{1,4} . Как регулярные выражения решают, сколько цифр им захватить, одну или четыре? Это определяется пропуском квантификаторов.
По умолчанию все квантификаторы являются жадными, то есть стараются захватить столько подходящих под шаблон символов, сколько смогут.
В некоторых случаях это может стать проблемой. Например, возьмём часть оглавления поэмы Венедикта Ерофеева «Москва — Петушки», записанную в одну строку:
Фрязево — 61-й километр..........64 61-й километр — 65-й километр…68 65-й километр — Павлово-Посад…71 Павлово-Посад — Назарьево........73 Назарьево — Дрезна...............77 Дрезна — 85-й километр...........80
Нужно написать регулярное выражение, которое выделит каждый пункт оглавления. Для этого определим признаки, по которым мы будем это делать:
Посмотрим в конструкторе, как работает наше выражение:
Что же произошло? Почему найдено только одно совпадение, причем за него посчитали весь текст сразу? Всё дело в жадности квантификатора + , который старается захватить максимально возможное количество подходящих символов.
В итоге шаблон \w находит совпадение с буквой «Ф» в начале текста, шаблон \.\d{1,3} находит совпадение с «.80» в конце текста, а всё, что между ними, покрывается шаблоном .+ .
Чтобы квантификатор захватывал минимально возможное количество символов, его нужно сделать ленивым. В таком случае каждый раз, находя совпадение с шаблоном . , регулярное выражение будет спрашивать: «Подходят ли следующие символы в строке под оставшуюся часть шаблона?»
Если нет, то функция будет искать следующее совпадение с . . А если да, то . закончит свою работу и следующие символы строки будут сравниваться со следующей частью регулярного выражения: \.\d{1,3} .
Чтобы объявить квантификатор ленивым, после него надо поставить символ ? . Сделаем ленивым квантификатор + в нашем регулярном выражении для поиска строк в оглавлении:
Теперь, когда мы уверены в правильности работы нашего регулярного выражения, используем функцию re.findall , чтобы выписать оглавление построчно:
В некоторых случаях одну и ту же задачу можно решить разными способами, используя разные возможности регулярок. Попробуйте решить следующие задачи самостоятельно. Возможно, у вас даже получится сделать это более эффективно.
При обнародовании судебных решений из них извлекают персональные данные участников процесса — фамилии, имена и отчества. Каждое слово в Ф. И. О. начинается с заглавной буквы, при этом фамилия может быть двойная.
Напишите программу,
Бразильские голые девки
Тату на интимном месте голой девушки
Любительское ню фото на отдыхе за границей

Report Page