- Найти заглавные (прописные) символы латиницы
- Найти заглавные (прописные) символы кириллицы
- Найти прописные символы кириллицы или латиницы
- Найти любые заглавные буквы
- Найти любые строчные буквы
- Инструмент “Обнаружить заглавные буквы” в !SEMTools
Поиск именованных сущностей — задача, встречающаяся во множестве профессий. Возникает там, где в текстовом массиве встречаются те или иные имена собственные. Это могут быть названия брендов, ФИО людей, географические названия (топонимы), названия организаций и другие наименования живых и неживых существ.
Все их объединяет простое правило: они пишутся с заглавной буквы, что одновременно становится и своеобразным маркером, позволяющим выделить эти единицы среди остального текста.
При работе с большими массивами данных часто бывает предпочтительнее сначала обнаружить среди ячеек те, что содержат наименования, и далее уже производить более “тяжёлые” операции:
- массовую замену символов/слов;
- извлечение текста с заглавными буквами — будь то слова или все содержимое ячейки;
- удаление символов, слов, словосочетаний или всего содержимого ячеек.
Найти заглавные (прописные) символы латиницы
В Excel есть функция НАЙТИ — она регистрозависимая, что позволяет найти буквы в том регистре, в котором они перечислены. В сочетании с формулой массива эта функция возвращает позицию любого найденного символа из массива.
Поскольку в ASCII-таблице символов прописные английские буквы идут друг за другом по порядку с 65 по 90, можно использовать менее громоздкую формулу массива для их поиска:
{=СЧЁТ(НАЙТИ(СИМВОЛ(СТРОКА(65:90));A1))>0}
Данная формула вернет ИСТИНА, если в ячейке A1 есть хотя бы одна заглавная английская буква.
Важно: фигурные скобки в данном случае появляются сами, вводить их не нужно — нужно вводить формулу без них и использовать сочетание Ctrl + Shift + Enter.
Найти заглавные (прописные) символы кириллицы
Формула аналогична предыдущей, разница лишь в диапазоне символов — от 192 до 223:
{=СЧЁТ(НАЙТИ(СИМВОЛ(СТРОКА(192:223));A1))>0}
Есть пара замечаний к этой формуле:
- Данный диапазон не включает в себя букву Ё;
- Язык системы (Windows) должен быть русский, т.к. ASCII-таблица привязана именно к нему.
Найти прописные символы кириллицы или латиницы
Функция не отличается изящностью, но это лучшее, что предоставляет нам Excel в его базовой конфигурации. В зависимости от наличия в строке прописных букв функция возвращает ИСТИНА или ЛОЖЬ.
=СЧЁТ(НАЙТИ({"A":"B":"C":"D":"E":"F":"G":"H":"I":"J":"K":"L":"M":"N":"O":"P":"Q":"R":"S":"T":"U":"V":"W":"X":"Y":"Z":"А":"Б":"В":"Г":"Д":"Е":"Ё":"Ж":"З":"И":"Й":"К":"Л":"М":"Н":"О":"П":"Р":"С":"Т":"У":"Ф":"Х":"Ц":"Ч":"Ш":"Щ":"Ы":"Э":"Ю":"Я"};A1))>0
Можно решить задачу чуть более компактной формулой массива, совмещающей формулы выше:
{=СЧЁТ(НАЙТИ(СИМВОЛ(СТРОКА($192:$223));A1))+СЧЁТ(НАЙТИ(СИМВОЛ(СТРОКА($65:$90));A1))>0}
Найти любые заглавные буквы
Помимо кириллицы и латиницы есть и другие алфавиты. Не перечислять же их нам все — формулы будут гигантскими и ресурсозатратными.
Для поиска заглавных букв нам поможет логика, а именно использование функций СТРОЧН и СОВПАД, последняя из которых позволяет сравнивать значения по регистру.
Логика такова:
- Переведём значение в нижний регистр,
- Сравним результат с исходным,
- Если не совпадут, значит, хотя бы один символ был в верхнем регистре.
А вот и формула:
=НЕ(СОВПАД(СТРОЧН(A1);A1))
Найти любые строчные буквы
Формула аналогична той, что ищет символы в верхнем регистре. Единственное отличие — в ней используется функция ПРОПИСН. Вот формула:
=НЕ(СОВПАД(ПРОПИСН(A1);A1))
Чтобы не приходилось запоминать сложный синтаксис составных функций, можно пользоваться готовыми решениями. !SEMTools располагает набором подобных возможностей, включая и процедуру обнаружения заглавных букв.
Макрос находится в группе “Обнаружить” в первом меню “Символы”. Инструкция безумно проста:
- Скопируйте исходный столбец с данными в соседний,
- Оставив выделенным скопированный диапазон (иначе говоря, ничего больше не делая), выберите процедуру в меню “Обнаружить символы” —> “Заглавные”.
Ячейки, содержащие заглавные буквы, заменятся на значение “ИСТИНА”, не содержащие их — на “ЛОЖЬ”. Далее можно фильтровать, сортировать, копировать и производить любые дальнейшие действия с маркированными таким образом данными.
Более подробную инструкцию по использованию функционала надстройки можно посмотреть в видео, где рассмотрены в том числе некоторые подводные камни.
Смотрите также похожие разделы:
- Найти кириллицу и латиницу в Excel;
- Регулярные выражения в Excel – найти, заменить, извлечь;
- Изменить регистр букв в Excel.
Нужно найти заглавные или строчные буквы в Excel?
В !SEMTools есть это и сотни других готовых решений!
Роман интересуется:
Как в документе найти все слова, написанные прописными буквами? Причем, можно ли результаты поиска вывести вместе, или ворд будет переходить от слова к слову?
Можно воспользоваться следующим макросом, который мне помогли реализовать специалисты VBA с форума microsoft.public.word.vba.general.
Этот макрос позволяет найти в документе все слова, написанные прописными буквами, скопировать их в конец документа, отсортировать по алфавиту и удалить повторяющиеся слова. При этом, не затрагиваются односимвольные слова, типа О, И и так далее.
Обратите внимание, что макрос писал не я, по моей просьбе его составили специалисты с указанного выше форума. Тем не менее, я добавил в текст макроса свои поясняющие комментарии (для себя и тех, кому это может быть интересно в плане изучения опыта).
Sub UcaseList() 'Поиск в тексте слов с прописными буквами, копирование их в конец документа, сортировка и удаление повторяющихся 'Помощь от Jean-Guy Marcil и Graham Mayor 'http://groups.google.ru/group/microsoft.public.word.vba.general/ Dim rngDoc As Word.Range Dim wu As Word.Range Dim lngDocEnd As Long Set rngDoc = ActiveDocument.Range lngDocEnd = rngDoc.End With ActiveDocument Selection.EndKey Unit:=wdStory 'переходим в конец документа Selection.TypeParagraph 'вставляем параграф .Bookmarks.Add Range:=Selection.Range, Name:="ListStart" 'вставляем закладку 'для каждого слова проверяем его регистр и если есть слова с прописными буквами, добавляем их в конец документа For Each wu In rngDoc.Words If wu.Case = wdUpperCase Then .Range.InsertAfter vbCrLf & wu.Text rngDoc.End = lngDocEnd End If Next wu .Bookmarks("ListStart").Select 'выбираем закладку, выделяем все слова, что идут ниже ее, и сортируем их по алфавиту With Selection .EndKey Unit:=wdStory, Extend:=wdExtend .Sort , FieldNumber:="Paragraphs", _ SortFieldType:=wdSortFieldAlphanumeric, _ SortOrder:=wdSortOrderAscending 'с отсортированными словами With .Find .ClearFormatting .Replacement.ClearFormatting 'удаляем пробелы после слов .Text = "[ ](^13)" .Replacement.Text = "1" .MatchWildcards = True .Execute Replace:=wdReplaceAll 'удаляем лишние концы абзацев .Text = "(*^13)@" .Replacement.Text = "1" .MatchWildcards = True .Execute Replace:=wdReplaceAll 'ищем повторяющиеся слова и удаляем их .Text = "([!A-Z-А-ЯЁ])[A-Z-А-ЯЁ]^13" .Replacement.Text = "1" .Execute Replace:=wdReplaceAll End With End With End With End Sub
Если вы не знаете, как подключить к документу и применить этот макрос, изучите следующие заметки с сайта:
Создание макроса из готового кода
Автоматическая запись макроса
C# | ||
|
1)Этот код находит все заглавные буквы в тексте и выводит в новое окно. Но мне нужно найти только сокращения. Например ОАО или СМС или ТУ. Кароче говоря, все, что больше одной буквы. Но этот код берет и одиночные тоже.
Если добавляю условие типа if (s[i][j].ToString() == s[i][j].ToString().ToUpper() && s[i][j+1].ToString() == s[i][j+1].ToString().ToUpper() ) то получаю ошибку из за того что он пытается взять вне диапазона массива. Если в условии
for (int j = 0; j < s[i].Length; j++) делаю for (int j = 0; j < s[i].Length-1; j++) , то он перестает брать весь текст.
Весь день пытаюсь это исправить.
2)Так же если у меня будет заканчиваться строка на заглавную букву и начинаться, то он выстроит ее как одно слово. Например:
Катя гуляла по МКАД
Все заценили наряд.
После прогонки такого сообщения найдет “К МКАДВ”
3) Лишние символы типа запятых найденных через .ToUpper() я убираю командами .Replace. Так же у меня есть код прогонки через массив БУКВ, но когда я прогоняю через него, то он выводит все без пробелов. Например
Бабушка из России жалуется на США
Выведет: БРСША. Конечно как вариант можно добавить пробел с массив нужных символов, но суть не в этом.
Replace-ом можно убрать запятые , точки и тд, но вот как убрать например знак °С вот такой .
Спасибо
Виктория Петрова
Ученик
(166),
закрыт
2 года назад
Как в Word найти все слова, написанные заглавными буквами?
Необходимо для создания макроса, а именно – такие слова нужно найти, выделить и перенести на новую строку.
Николай Шмаков 三十
Искусственный Интеллект
(107466)
3 года назад
Есть такая фишка.
То есть, если это для автоматического форматирования стихов, то следует учесть, что все имена собственные (Маши, Саши, Даши) пойдут в начало строки. Слово с заглавной не имеющее перед собой пробела не будет перенесено. А, именно « “Абракадабра» не переннесётся. Поэтому придётся повторить вручную левых кавычек. Либо по этой маске: (<“)
Добрый вечер, уважаемые форумчане! Может кто знает как из текстовой строки извлечь слова, написанные прописными буквами? С уважением, |
|
vikttur Пользователь Сообщений: 47199 |
Вам только название нужно? Если в нем встретятся строчные? Если прописные будут не только в этом слове? |
{quote}{login=vikttur}{date=16.12.2009 01:10}{thema=}{post}Вам только название нужно? Если в нем встретятся строчные? Если прописные будут не только в этом слове?{/post}{/quote} Строчные не встретятся. А вот прописные буквы могут быть в начале строки. Но с этим я справлюсь. |
|
vikttur Пользователь Сообщений: 47199 |
Показываем второе слово: |
{quote}{login=vikttur}{date=16.12.2009 01:25}{thema=}{post}Показываем второе слово: Да, в любом месте текста. Эти прописные слова идут в 99 % одно за другим. |
|
ytk5kyky Пользователь Сообщений: 2410 |
Прописные русские или латиница? Видите, как с текстом сложно… |
ytk5kyky Пользователь Сообщений: 2410 |
Вот формула, которая берет все что между первой и последней прописной. |
{quote}{login=Лузер™}{date=16.12.2009 01:44}{thema=}{post}Прописные русские или латиница? Видите, как с текстом сложно…{/post}{/quote} Тогда давайте ограничимся 3 вариантами. Они в файле. |
|
Sh_Alex Пользователь Сообщений: 732 |
Пользовательская функция выбирает все прописные буквы из ячейки, за исключением первой. |
{quote}{login=Лузер™}{date=16.12.2009 01:54}{thema=}{post}Вот формула, которая берет все что между первой и последней прописной. Да. работает формула. Единственное что приходится – убирать прописные буквы в первых словах. Если это конечный вариант, то тему можно закрывать. |
|
{quote}{login=Sh_Alex}{date=16.12.2009 01:59}{thema=}{post}Пользовательская функция выбирает все прописные буквы из ячейки, за исключением первой. Благодарю! |
|
vikttur Пользователь Сообщений: 47199 |
Добейте, мне некогда: |
{quote}{login=vikttur}{date=16.12.2009 02:04}{thema=}{post}Добейте, мне некогда: Спасибо огромное! |
|
vikttur Пользователь Сообщений: 47199 |
#14 17.12.2009 10:12:34 Полная формула: |