Делаю каталог фильмов. Данные - с Киноэксперта. Нужно сократить колонку. Желательно с именами обойтись без словаря имен.
Может уже есть похожие решения? ================================== Было
Галина Беляева (...Джоанна Седвик), Александр Филиппенко (...будущий Ричард Глостер), Игорь Шавлак (...Дик Шелтон), Владимир Литвинов, Владимир Разумовский, Дмитрий Герасимов, Александр Кудинов, Николай Дупак, Юрий Смирнов, Дмитрий Орловский (...Картер), Сергей Тарасов, Яна Друзь, Леонид Кулагин, Альгимантас Масюлис, Борис Химичев (...Джон Мщу-за-всех), Борис Хмельницкий.
Привет, Михаил. А имена усекать кто будет? Версия регулярными выражениями (Udf-функция)
Код
Public Function getShortest(ByVal text As String) As String
Dim pReg As Object
Set pReg = CreateObject("VBScript.RegExp")
pReg.Global = True
pReg.Pattern = " \(.+?\)"
text = pReg.Replace(text, "")
pReg.Pattern = "([А-ЯЁ])[а-яё]+(?= )"
getShortest = pReg.Replace(text, "$1.")
End Function
В Ворде первая замена как написал БМВ, только впереди пробел, и Больше - Подстановочные знаки. Вторая замена для сокращения имен (, ?)[! ]{1;} на \1. Первое имя сократите вручную.
То была дополнительная загадка, сравни условие и результат - найди то, чего не хватает. Просто рука бойца писать устала Скоро Z на форум подтянутся, те говорят более 8 секунд ни на чём сосредоточится не могут. Тогда загадки будут интереснее.
cammus, Вам предложено было 2 разных , но тем не менее близких по сути варианта, так как все используют маски поиска и подстановки. Что касается Word , так как пользоваться приходится не часто, то под рукой держу эту памятку Как нистранно, никогда не натыкался на что-то подобное в описаниях MS, может не сильно искал.
Меняем на первую букву и точку Подскажите пожалуйста, что это за синтаксис $1 Насколько я понял, это подстановка строк? Если не трудно, чуть подробнее об этих подстановках или ссылку.
К сожалению по ссылке ничего не нашел. Там только 4 вхождения $ 2.4. Multiline Замечание: чтение и запись. Влияет на работу метасимволов ^ и $. 4. Метасимволы objRegExp.Pattern = "^[A-Z]:\\$" $ Определяет конец входной строки. objRegExp.Pattern = "абв$"
Как я понял в паттерне, pReg.Pattern = "([А-ЯЁ])[а-яё]+(?= )" Галина_ Г это группа ([А-ЯЁ]) алина это диапазон с квантором [а-яё]+ пробел это группа (?= ) То есть, до пробела. Кстати, где этот синтаксис расписан?
Ну, а дальше Replace(text, "$1.") К первой группе (прописная буква) добавляется точка.
А если pReg.Pattern = "([А-ЯЁ])[а-яё]+(?= )" заменить на pReg.Pattern = "([А-ЯЁ])[а-яё]+(?= ) " то пропадет пробел между точкой и фамилией, что равносильно указанному выше коду
Расписано там же (?=шаблон). Это шаблон с возвратом. То есть проверяется заканчивается ли предыдущий текст таким значением. Группа "заканчивается ли" не входит в результат отбора, поэтому пробел и не попадает под изменения.
Цитата
cammus написал: К первой группе (прописная буква) добавляется точка.
Не совсем верно - всё найденное по шаблону заменяется на значение первой группы и точку.