www_world
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору kamenkapenza Цитата: Не подскажете, как переделать название (одна из группы газет) Антракт, [еженедельная газета], (год 4-й) , 1867, № 20, 21 мая 21.05.1867 (6152186) в Антракт 1867-20 ? | Все то же самое, что и в предыдущем случае Антракт, [еженедельная газета], (год 4-й) , 1867, № 20, 21 мая 21.05.1867 (6152186) зеленое - неизменная часть строки, которую мы можем использовать как есть в строке замен. красное - изменяемая часть строки, нужная нам, ее нужно заменить регэкспами (от regular expression - регулярное выражение - строка поиска позволяющая искать строки или их части по определенным признакам, эта строка содержит как минимум либо один символ являющийся абстрактным представлением текстового или бинарного символа и/или их комбинаций, либо условие относительно взаимного расположения таковых; то есть, попросту - регэксп - текстовый/символьный шаблон, трафарет, составленный по особым правилам, по которому ищут/распознают символы/строки/куски текста с целью удаления/замены/перемещения и тд.Регэксп - единица вашего текстового контента - например строка - как минимум, часть которой представлена с пом. абстрактных символов). Поскольку каждая ваша строка имеет уникальный (встречается 1 раз в каждой строке) символ №, это позволяет упростить целевой регэксп, не перечисляя все его куски (чтобы однозначно идентифицировать нужные вам группы цифр). Чтобы не писать в явном виде в строке замен первую неизменную часть сткоки (название газеты), в строке поиска сделаем из нее группу (не забываем домик вначале, поскольку анализируем все строки строго с начала каждой) ^(Антракт) далее, до нужного нам первого номера (1867) идет фигня нам ненужная (синее) - так и обозначаем ее .* (может быть любой набор символов) и за ним группа нужных нам цифр (\d+). В силу того, что исользую самый простейший синтаксис (специально для объяснения), то после .* нужно добавить пробел (как в исходной строке, чтобы повысить избирательность для первой группы цифр (мы ее задали произвольной длины - от одной цифры и более), а регэксп .* является жадным и старается захватить как больше символов, если у него есть выбор и без указанного пробела он захватит и цифры нашего номера, оставив лишь одну последнюю. ^(Антракт).* (\d+) Альтернативой является прямое указание числа цифр в этой группе (если число цифр неизменно во всех строках) ^(Антракт).*(\d{4}) А вот далее наш репер - символ № да еще и в окружении пробелов и запятой, что делает этот кусок еще более уникальным. Добавляем его в регэксп в явном виде. А сразу после него вторая нужная нам группа цифр ^(Антракт).* (\d+), № (\d+) Все что дальше - нам не интересно .* и не забываем конец строки $ ^(Антракт).* (\d+), № (\d+).*$ или ^(Антракт).*(\d{4}), № (\d+).*$ Регэксп строки поиска готов. Он имеет три группы (каждая в круглых скобках). Соответственно строка замен $1 $2-$3 Вот и все. __________________________ И да, вот например, регэксп, работающий на всех трех приведенных вами примерах Цитата: Антракт, [еженедельная газета], (год 4-й) , 1867, № 20, 21 мая 21.05.1867 (6152186) Вечерняя Москва, 1937, № 210 (4141), 13 сентября - Коллектив авторов 13.09.1937 (6306156) Вечерняя Москва, 1 апреля, 1973, № 77 (15035) - Коллектив авторов 01.04.1973 (6302240) | Найти ^([^,]+).*(\d{4}), № (\d+).*$ Заменить на $1 $2-$3 __________________ Если вы приведете более длинный список названий, то возможно удастся составить один регэксп и для них всех. | Всего записей: 662 | Зарегистр. 04-11-2018 | Отправлено: 21:26 01-01-2026 | Исправлено: www_world, 22:00 01-01-2026 |
|