Поиск слов
Поиск словСлова спрятаны в таблице букв. Найдите их как можно быстрее.
Примеры
Сорока 1 Урок 4
от Yuliiakusmin
Поиск слов
Прилагательные
от Elenk
Поиск слов
Диалог 2, урок 3А
от U10242800
Поиск слов
Семья
от Djdaniorerio
Поиск слов
Тело
от U37907604
Поиск слов
Үйл үг
от Ulzii
Поиск слов
спорт
от Ovca015
Поиск слов
Wörter mit St, Sp
от U17939631
Поиск слов
Berufe
от Darjasahibullin
Поиск слов
Adjektive
от Phamlong246845
Поиск слов
Schulfächer
от Yevgeniya2507
Поиск слов
Frühling/Schneider
от Schneider15
Поиск слов
Марина Павленко «Півтора бажання»
от Tane4kasch27
Поиск слов
Wörtersuche Märchen
от Proesch
Поиск слов
Elektrizität im Alltag
от Annkristin8
Поиск слов
Lebenslauf
от Ildiko96
Поиск слов
Глаголы
от Elenk
Поиск слов
PARTIZIP II: regelmäßige Verben
от Luisa151
Поиск слов
от Chiromantie
Поиск слов
Im Klassenraum
от Grotemeyer
Поиск слов
Wörtersuche Perfekt unregelmäßig
от Moep
Поиск слов
Beste Freunde A1. 1. Lektion 8
от Gutentag5
Поиск слов
Weather
от Nikrapti
Поиск слов
от Olgapanina
Поиск слов
Haustiere Wörtersuche
от Sprachlernzentrum
Поиск слов
Цвета
от Elenk
Поиск слов
Wörter mit ck
от Teamanzo
Поиск слов
Sonnensystem
от Ankehess
Поиск слов
Wörter mit z und tz
от Rott
Поиск слов
Menschen A1. 1 Familienwörter
от Alexaseng
Поиск слов
Зарегистрируйтесь, чтобы начать создание
Узнайте о других шаблонах
Сопоставить Викторина Случайные карты Групповая сортировкаРегулярные выражения в Python: теория и практика
Рассмотрим регулярные выражения в Python, начиная синтаксисом и заканчивая примерами использования. 0-9];
Для чего используются регулярные выражения
- для определения нужного формата, например телефонного номера или email-адреса;
- для разбивки строк на подстроки;
- для поиска, замены и извлечения символов;
- для быстрого выполнения нетривиальных операций.
Синтаксис таких выражений в основном стандартизирован, так что вам следует понять их лишь раз, чтобы использовать в любом языке программирования.
Примечание Не стоит забывать, что регулярные выражения не всегда оптимальны, и для простых операций часто достаточно встроенных в Python функций.Хотите узнать больше? Обратите внимание на статью о регулярках для новичков.
Регулярные выражения в Python
В Python для работы с регулярками есть модуль re
. Его нужно просто импортировать:
import re
А вот наиболее популярные методы, которые предоставляет модуль:
re.match()
re.search()
re.findall()
re.split()
re.sub()
re.compile()
Рассмотрим каждый из них подробнее.
re.match(pattern, string)
Этот метод ищет по заданному шаблону в начале строки. Например, если мы вызовем метод
на строке «AV Analytics AV» с шаблоном «AV», то он завершится успешно. Но если мы будем искать «Analytics», то результат будет отрицательный:
import re result = re.match(r'AV', 'AV Analytics Vidhya AV') print result Результат: <_sre.SRE_Match object at 0x0000000009BE4370>
Искомая подстрока найдена. Чтобы вывести её содержимое, применим метод group()
(мы используем «r» перед строкой шаблона, чтобы показать, что это «сырая» строка в Python):
result = re. match(r'AV', 'AV Analytics Vidhya AV') print result.group(0) Результат: AV
Теперь попробуем найти «Analytics» в данной строке. Поскольку строка начинается на «AV», метод вернет None
:
result = re.match(r'Analytics', 'AV Analytics Vidhya AV') print result Результат: None
Также есть методы start()
и end()
для того, чтобы узнать начальную и конечную позицию найденной строки.
result = re.match(r'AV', 'AV Analytics Vidhya AV') print result.start() print result.end() Результат: 0 2
Эти методы иногда очень полезны для работы со строками.
re.search(pattern, string)
Метод похож на match()
, но ищет не только в начале строки. В отличие от предыдущего,
вернёт объект, если мы попытаемся найти «Analytics»:
result = re.search(r'Analytics', 'AV Analytics Vidhya AV') print result.group(0) Результат: Analytics
Метод search()
ищет по всей строке, но возвращает только первое найденное совпадение.
re.findall(pattern, string)
Возвращает список всех найденных совпадений. У метода findall()
нет ограничений на поиск в начале или конце строки. Если мы будем искать «AV» в нашей строке, он вернет все вхождения «AV». Для поиска рекомендуется использовать именно findall()
, так как он может работать и как re.search()
, и как re.match()
.
result = re.findall(r'AV', 'AV Analytics Vidhya AV') print result Результат: ['AV', 'AV']
re.split(pattern, string, [maxsplit=0])
Этот метод разделяет строку по заданному шаблону.
result = re.split(r'y', 'Analytics') print result Результат: ['Anal', 'tics']
В примере мы разделили слово «Analytics» по букве «y». Метод split()
принимает также аргумент maxsplit
со значением по умолчанию, равным 0. В данном случае он разделит строку столько раз, сколько возможно, но если указать этот аргумент, то разделение будет произведено не более указанного количества раз. Давайте посмотрим на примеры Python RegEx:
result = re.split(r'i', 'Analytics Vidhya') print result Результат: ['Analyt', 'cs V', 'dhya'] # все возможные участки.
result = re.split(r'i', 'Analytics Vidhya',maxsplit=1) print result Результат: ['Analyt', 'cs Vidhya']
Мы установили параметр maxsplit
равным 1, и в результате строка была разделена на две части вместо трех.
re.sub(pattern, repl, string)
Ищет шаблон в строке и заменяет его на указанную подстроку. Если шаблон не найден, строка остается неизменной.
result = re.sub(r'India', 'the World', 'AV is largest Analytics community of India') print result Результат: 'AV is largest Analytics community of the World'
re.compile(pattern, repl, string)
Мы можем собрать регулярное выражение в отдельный объект, который может быть использован для поиска. Это также избавляет от переписывания одного и того же выражения.
pattern = re.compile('AV') result = pattern.findall('AV Analytics Vidhya AV') print result result2 = pattern.findall('AV is largest analytics community of India') print result2 Результат: ['AV', 'AV'] ['AV']
До сих пор мы рассматривали поиск определенной последовательности символов. Но что, если у нас нет определенного шаблона, и нам надо вернуть набор символов из строки, отвечающий определенным правилам? Такая задача часто стоит при извлечении информации из строк. Это можно сделать, написав выражение с использованием специальных символов. Вот наиболее часто используемые из них:
Оператор | Описание |
---|---|
. | Один любой символ, кроме новой строки \n. |
? | 0 или 1 вхождение шаблона слева |
+ | 1 и более вхождений шаблона слева |
* | 0 и более вхождений шаблона слева |
\w | Любая цифра или буква (\W — все, кроме буквы или цифры) |
\d | Любая цифра [0-9] (\D — все, кроме цифры) |
\s | Любой пробельный символ (\S — любой непробельный символ) |
\b | Граница слова |
[. и $ | Начало и конец строки соответственно |
{n,m} | От n до m вхождений ({,m} — от 0 до m) |
a|b | Соответствует a или b |
() | Группирует выражение и возвращает найденный текст |
\t, \n, \r | Символ табуляции, новой строки и возврата каретки соответственно |
Больше информации по специальным символам можно найти в документации для регулярных выражений в Python 3.
Перейдём к практическому применению Python регулярных выражений и рассмотрим примеры.
Задачи
Вернуть первое слово из строки
Сначала попробуем вытащить каждый символ (используя .
)
result = re.findall(r'.', 'AV is largest Analytics community of India') print result Результат: ['A', 'V', ' ', 'i', 's', ' ', 'l', 'a', 'r', 'g', 'e', 's', 't', ' ', 'A', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', ' ', 'c', 'o', 'm', 'm', 'u', 'n', 'i', 't', 'y', ' ', 'o', 'f', ' ', 'I', 'n', 'd', 'i', 'a']
Для того, чтобы в конечный результат не попал пробел, используем вместо .
\w
.
result = re.findall(r'\w', 'AV is largest Analytics community of India') print result Результат: ['A', 'V', 'i', 's', 'l', 'a', 'r', 'g', 'e', 's', 't', 'A', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', 'c', 'o', 'm', 'm', 'u', 'n', 'i', 't', 'y', 'o', 'f', 'I', 'n', 'd', 'i', 'a']
Теперь попробуем достать каждое слово (используя *
или +
)
result = re.findall(r'\w*', 'AV is largest Analytics community of India') print result Результат: ['AV', '', 'is', '', 'largest', '', 'Analytics', '', 'community', '', 'of', '', 'India', '']
И снова в результат попали пробелы, так как *
означает «ноль или более символов». Для того, чтобы их убрать, используем +
:
result = re.findall(r'\w+', 'AV is largest Analytics community of India') print result Результат: ['AV', 'is', 'largest', 'Analytics', 'community', 'of', 'India']
Теперь вытащим первое слово, используя ^
:
result = re. , то мы получим последнее слово, а не первое:result = re.findall(r'\w+$', 'AV is largest Analytics community of India') print result Результат: [‘India’]Вернуть первые два символа каждого слова
Вариант 1: используя
\w
, вытащить два последовательных символа, кроме пробельных, из каждого слова:result = re.findall(r'\w\w', 'AV is largest Analytics community of India') print result Результат: ['AV', 'is', 'la', 'rg', 'es', 'An', 'al', 'yt', 'ic', 'co', 'mm', 'un', 'it', 'of', 'In', 'di']Вариант 2: вытащить два последовательных символа, используя символ границы слова (
\b
):result = re.findall(r'\b\w.', 'AV is largest Analytics community of India') print result Результат: ['AV', 'is', 'la', 'An', 'co', 'of', 'In']Вернуть домены из списка email-адресов
Сначала вернём все символы после «@»:
result = re.findall(r'@\w+', 'abc. [email protected], [email protected], [email protected], [email protected]') print result Результат: ['@gmail', '@test', '@analyticsvidhya', '@rest']Как видим, части «.com», «.in» и т. д. не попали в результат. Изменим наш код:
result = re.findall(r'@\w+.\w+', '[email protected], [email protected], [email protected], [email protected]') print result Результат: ['@gmail.com', '@test.in', '@analyticsvidhya.com', '@rest.biz']Второй вариант — вытащить только домен верхнего уровня, используя группировку —
( )
:result = re.findall(r'@\w+.(\w+)', '[email protected], [email protected], [email protected], [email protected]') print result Результат: ['com', 'in', 'com', 'biz']Извлечь дату из строки
Используем
\d
для извлечения цифр.result = re.findall(r'\d{2}-\d{2}-\d{4}', 'Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, ABC 67-8945 12-01-2009') print result Результат: ['12-05-2007', '11-11-2011', '12-01-2009']Для извлечения только года нам опять помогут скобки:
result = re. findall(r'\d{2}-\d{2}-(\d{4})', 'Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, ABC 67-8945 12-01-2009') print result Результат: ['2007', '2011', '2009']Извлечь слова, начинающиеся на гласную
Для начала вернем все слова:
result = re.findall(r'\w+', 'AV is largest Analytics community of India') print result Результат: ['AV', 'is', 'largest', 'Analytics', 'community', 'of', 'India']А теперь — только те, которые начинаются на определенные буквы (используя
[]
):result = re.findall(r'[aeiouAEIOU]\w+', 'AV is largest Analytics community of India') print result Результат: ['AV', 'is', 'argest', 'Analytics', 'ommunity', 'of', 'India']Выше мы видим обрезанные слова «argest» и «ommunity». Для того, чтобы убрать их, используем
\b
для обозначения границы слова:result = re.findall(r'\b[aeiouAEIOU]\w+', 'AV is largest Analytics community of India') print result Результат: ['AV', 'is', 'Analytics', 'of', 'India']Также мы можем использовать
^
внутри квадратных скобок для инвертирования группы:result = re. aeiouAEIOU ]\w+', 'AV is largest Analytics community of India') print result Результат: ['largest', 'community']Проверить формат телефонного номера
Номер должен быть длиной 10 знаков и начинаться с 8 или 9. Есть список телефонных номеров, и нужно проверить их, используя регулярки в Python:
li = ['9999999999', '999999-999', '99999x9999'] for val in li: if re.match(r'[8-9]{1}[0-9]{9}', val) and len(val) == 10: print 'yes' else: print 'no' Результат: yes no noРазбить строку по нескольким разделителям
Возможное решение:
line = 'asdf fjdk;afed,fjek,asdf,foo' # String has multiple delimiters (";",","," "). result = re.split(r'[;,\s]', line) print result Результат: ['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']Также мы можем использовать метод
re.sub()
для замены всех разделителей пробелами:line = 'asdf fjdk;afed,fjek,asdf,foo' result = re. sub(r'[;,\s]',' ', line) print result Результат: asdf fjdk afed fjek asdf fooИзвлечь информацию из html-файла
Допустим, нужно извлечь информацию из html-файла, заключенную между
<td>
и</td>
, кроме первого столбца с номером. Также будем считать, что html-код содержится в строке.Пример содержимого html-файла:
1NoahEmma2LiamOlivia3MasonSophia4JacobIsabella5WilliamAva6EthanMia7MichaelEmilyС помощью регулярных выражений в Python это можно решить так (если поместить содержимое файла в переменную
test_str
):result = re.findall(r'\d([A-Z][A-Za-z]+)([A-Z][A-Za-z]+)', test_str) print result Результат: [('Noah', 'Emma'), ('Liam', 'Olivia'), ('Mason', 'Sophia'), ('Jacob', 'Isabella'), ('William', 'Ava'), ('Ethan', 'Mia'), ('Michael', 'Emily')]Адаптированный перевод «Beginners Tutorial for Regular Expressions in Python»
Цифры 1 - 20 Поиск слов
Что такое поиск слов?
Поиск слов - это головоломка, в которой ряды букв расположены в форме квадрата, а слова написаны вперед, назад, по горизонтали, вертикали или диагонали. Будет список слов, которые игрок должен искать, и цель игрока - найти эти слова, скрытые в головоломке поиска слов, и выделить их.
Как выбрать слова для поиска слов?
Выбрав тему, выберите слова разной длины, уровня сложности и букв. Вам не нужно беспокоиться о том, чтобы сопоставить слова друг с другом, потому что WordMint сделает это за вас!
Как поиск по словам используется в классе?
Игры на поиск слов — отличный инструмент для учителей и отличный ресурс для учащихся. Они помогают расширять словарный запас, а также проверяют когнитивные способности и навыки поиска закономерностей.
Поскольку шаблоны поиска по словам полностью индивидуальны, вы можете создавать подходящие поисковые запросы для детей в детском саду и вплоть до студентов колледжей.
Кому подходит поиск по словам?
Один из часто задаваемых вопросов о поиске по словам касается того, существуют ли возрастные ограничения и дети какого возраста могут начинать поиск по словам. Фантастическая вещь в упражнениях по поиску слов заключается в том, что они полностью гибкие для любого возраста или уровня чтения, которые вам нужны.
При поиске слов можно использовать любое слово, большое или маленькое, поэтому существует буквально бесчисленное множество комбинаций, которые вы можете создавать для шаблонов. Шаблон легко настроить в соответствии с возрастом или уровнем обучения ваших учеников.
Как создать шаблон поиска слов?
Для самых простых шаблонов поиска по словам подойдет WordMint!
Готовые шаблоны
Чтобы быстро получить готовый шаблон, просто выполните поиск среди более чем 500 000 существующих шаблонов WordMint. Из такого большого выбора вы обязательно найдете то, что подходит именно вам!
Создайте свою учетную запись с нуля
- Войдите в свою учетную запись (присоединение бесплатно!)
- Перейти к «Моим головоломкам»
- Нажмите «Создать новую головоломку» и выберите «Поиск слов»
- Выберите макет, введите заголовок и выбранные слова
- Вот оно! Конструктор шаблонов создаст для вас шаблон поиска слов, и вы сможете сохранить его в своей учетной записи, экспортировать в виде документа Word или PDF и распечатать!
Как распечатать шаблон поиска слов?
Все наши шаблоны можно экспортировать в Microsoft Word для удобной печати или сохранить свою работу в формате PDF для печати для всего класса. Ваши пазлы сохраняются в вашей учетной записи для быстрого доступа и печати в будущем, поэтому вам не нужно беспокоиться о сохранении их на работе или дома!
Могу ли я создать поиск слов на других языках?
Поиск по словам — это фантастический ресурс для студентов, изучающих иностранный язык, поскольку он проверяет их навыки понимания прочитанного в веселой и увлекательной форме.
Мы полностью поддерживаем шаблоны поиска слов на испанском, французском и японском языках с диакритическими знаками, включая более 100 000 изображений.
Функции ПОИСК и ПОИСК в Excel с примерами формул
В учебном пособии объясняется синтаксис функций ПОИСК и ПОИСК в Excel и приводятся примеры формул для расширенного нетривиального использования.
В прошлой статье мы рассмотрели основы диалогового окна «Найти и заменить» в Excel. Однако во многих ситуациях вам может понадобиться, чтобы Excel автоматически находил и извлекал данные из других ячеек на основе ваших критериев. Итак, давайте подробнее рассмотрим, что могут предложить функции поиска Excel.
Функция ПОИСК Excel
Функция НАЙТИ в Excel используется для возврата позиции определенного символа или подстроки в текстовой строке.
Синтаксис функции поиска Excel:
НАЙТИ(найти_текст, внутри_текста, [начальный_номер])
Первые 2 аргумента обязательны, последний необязателен.
- Find_text - символ или подстрока, которую вы хотите найти.
- Within_text - текстовая строка для поиска. Обычно он предоставляется как ссылка на ячейку, но вы также можете ввести строку непосредственно в формулу.
- Start_num - необязательный аргумент, указывающий, с какого символа начинать поиск. Если опущено, поиск начинается с 1 st символ строки внутри_текста.
Если функция НАЙТИ не находит символ(ы) find_text, возникает ошибка #ЗНАЧ! возвращается ошибка.
Например, формула =НАЙТИ("d", "найти")
возвращает 4, потому что "d" является 4-й -й -й буквой в слове " найти ". Формула =НАЙТИ("а", "найти")
возвращает ошибку, так как в " найти " нет буквы "а".
Функция ПОИСК в Excel — о чем нужно помнить!
Чтобы правильно использовать формулу НАЙТИ в Excel, имейте в виду следующие простые факты:
- Функция НАЙТИ чувствительна к регистру . Если вы ищете совпадение без учета регистра, используйте функцию ПОИСК.
- Функция НАЙТИ в Excel не позволяет использовать подстановочных знака .
- Если аргумент find_text содержит несколько символов, функция НАЙТИ возвращает позицию первого символа . Например, формула НАЙТИ("ap","happy") возвращает 2, потому что "a" в 2 -я -я буква в слове "счастливый".
- Если внутри_текста содержится несколько вхождений поиска_текста, возвращается первое вхождение. Например, FIND("l", "hello") возвращает 3, что является позицией первого символа "l" в слове "hello".
- Если find_text является пустой строкой "", формула Excel FIND возвращает первый символ в строке поиска.
- Функция НАЙТИ в Excel возвращает значение #ЗНАЧ! ошибка , если происходит одно из следующих событий:
- Find_text не существует в пределах_текста.
- Start_num содержит больше символов, чем внутри_текста.
- Start_num равен 0 (ноль) или отрицательному числу.
Функция ПОИСК Excel
Функция ПОИСК в Excel очень похожа на НАЙТИ тем, что она также возвращает местоположение подстроки в текстовой строке. Синтаксис и аргументы аналогичны FIND:
.ПОИСК(найти_текст, внутри_текста, [начальный_номер])
В отличие от НАЙТИ, функция ПОИСК без учета регистра и позволяет использовать подстановочные знаки, как показано в следующем примере.
А вот пара основных формул ПОИСКА в Excel:
=ПОИСК("рынок", "супермаркет")
возвращает 6, поскольку подстрока "рынок" начинается с 6-го -го -го символа слова "супермаркет".
=ПОИСК("e", "Excel")
возвращает 1, так как "e" является первым символом в слове "Excel" без учета регистра.
Как и НАЙТИ, функция ПОИСК Excel возвращает #ЗНАЧ! ошибка, если:
- Значение аргумента find_text не найдено.
- Аргумент start_num больше, чем длина внутри_текста.
- Start_num равен или меньше нуля.
Далее в этом руководстве вы найдете еще несколько содержательных примеров формул, которые демонстрируют, как использовать функцию ПОИСК на листах Excel.
ПОИСК в Excel и ПОИСК в Excel
Как уже упоминалось, функции НАЙТИ и ПОИСК в Excel очень похожи с точки зрения синтаксиса и использования. Однако у них есть пара отличий.
1. ПОИСК с учетом регистра и ПОИСК без учета регистра
Наиболее существенное различие между функциями ПОИСК и НАЙТИ в Excel заключается в том, что ПОИСК не учитывает регистр, а НАЙТИ учитывает регистр.
Например, ПОИСК("e", "Excel") возвращает 1, так как игнорирует регистр "E", а НАЙТИ("e", "Excel") возвращает 4, поскольку учитывает регистр.
2.
Поиск с использованием подстановочных знаковВ отличие от функции НАЙТИ, функция ПОИСК в Excel допускает подстановочные знаки в аргументе текст_найти:
- Знак вопроса (?) соответствует одному символу и
- Звездочка (*) соответствует любой последовательности символов.
Чтобы увидеть, как это работает с реальными данными, рассмотрим следующий пример:
Как видно на снимке экрана выше, формула ПОИСК("функция*2013", A2) возвращает позицию первого символа ("f") в подстроке, если текстовая строка, указанная в аргументе внутри_текста, содержит как "функция " и "2013", независимо от того, сколько других символов находится между ними.
Совет. Чтобы найти вопросительный знак (?) или звездочку (*), введите тильду (~) перед соответствующим символом.
Excel Примеры формул НАЙТИ и ПОИСК
На практике функции Excel НАЙТИ и ПОИСК редко используются сами по себе. Как правило, вы должны использовать их в сочетании с другими функциями, такими как MID, LEFT или RIGHT, и следующие примеры формул демонстрируют некоторые примеры их использования в реальной жизни.
Пример 1. Найти строку до или после заданного символа
В этом примере показано, как можно найти и извлечь все символы в текстовой строке слева или справа от определенного символа. Чтобы упростить понимание, рассмотрим следующий пример.
Предположим, у вас есть столбец имен (столбец A), и вы хотите вывести Имя и Фамилию в отдельные столбцы.
Чтобы получить имя, вы можете использовать НАЙТИ (или ПОИСК) в сочетании с функцией ЛЕВЫЙ:
=ВЛЕВО(A2, НАЙТИ(" ", A2)-1)
или
=ВЛЕВО(A2, ПОИСК(" ", A2)-1)
Как вы, наверное, знаете, функция Excel ЛЕВЫЙ возвращает указанное количество крайних левых символов в строке. И вы используете функцию НАЙТИ, чтобы определить позицию пробела (""), чтобы сообщить функции ВЛЕВО, сколько символов нужно извлечь. При этом вы вычитаете 1 из позиции пробела, потому что не хотите, чтобы возвращаемое значение включало пробел.
Для извлечения фамилии используйте комбинацию функций ПРАВО, НАЙТИ/ПОИСК и ДЛСТР. Функция ДЛСТР нужна для получения общего количества символов в строке, из которой вы вычитаете позицию пробела:
=ВПРАВО(A2,ДЛСТР(A2)-НАЙТИ(" ",A2))
или
=ВПРАВО(A2,LEN(A2)-ПОИСК(" ",A2))
На следующем снимке экрана показан результат:
Более сложные сценарии, такие как извлечение отчества или разделение имен с суффиксами, см. в разделе Как разделить ячейки в Excel с помощью формул.
Пример 2. Найти N-е вхождение заданного символа в текстовую строку
Предположим, у вас есть несколько текстовых строк в столбце A, скажем, список SKU, и вы хотите найти позицию 2 nd тире в строке. Следующая формула отлично работает:
= НАЙТИ ("-", A2, НАЙТИ ("-", A2)+1)
Первые два аргумента легко интерпретировать: найдите тире ("-") в ячейке A2. В третий аргумент (start_num) вы встраиваете еще одну функцию НАЙТИ, которая сообщает Excel, что поиск нужно начинать с символа, следующего за первым вхождением тире (НАЙТИ("-",A2)+1).
Для возврата позиции 3 рд вхождение , вы вставляете приведенную выше формулу в аргумент start_num другой функции НАЙТИ и добавляете 2 к возвращаемому значению:
=НАЙТИ("-",A2, НАЙТИ("-", A2, НАЙТИ("-",A2)+1) +2)
Другой и, вероятно, более простой способ найти N-е вхождение заданного символа — использовать функцию Excel НАЙТИ в сочетании с СИМВОЛОМ и ПОДСТАВИТЬ:
= НАЙТИ (СИМВОЛ (1), ПОДСТАВИТЬ (A2, "-", СИМВОЛ (1), 3))
Где «-» — это рассматриваемый символ, а «3» — это N-е вхождение, которое вы хотите найти.
В приведенной выше формуле функция ПОДСТАВИТЬ заменяет третье вхождение дефиса ("-") на СИМВОЛ(1), который является непечатаемым символом "Начало заголовка" в системе ASCII. Вместо CHAR(1) вы можете использовать любой другой непечатаемый символ от 1 до 31. Затем функция НАЙТИ возвращает позицию этого символа в текстовой строке. Итак, общая формула выглядит следующим образом:
НАЙТИ(СИМВОЛ(1),ЗАМЕНИТЬ( ячейка , символ ,СИМВОЛ(1), N-е вхождение ))
На первый взгляд может показаться, что приведенные формулы имеют мало практической ценности, но следующий пример покажет, насколько они полезны при решении реальных задач.
Примечание. Помните, что функция НАЙТИ в Excel чувствительна к регистру. В нашем примере это не имеет значения, но если вы работаете с буквами и хотите, чтобы соответствовало без учета регистра, используйте функцию ПОИСК вместо НАЙТИ.
Пример 3. Извлечь N символов после определенного символа
Чтобы найти подстроку заданной длины в любой текстовой строке, используйте ПОИСК или ПОИСК в Excel в сочетании с функцией СРЕДН. В следующем примере показано, как можно использовать такие формулы на практике.
В нашем списке SKU, предположим, вы хотите найти первые 3 символа после первого дефиса и вытащить их в другой столбец.
Если группа символов, предшествующая первому дефису, всегда содержит одинаковое количество элементов (например, 2 символа), это будет тривиальной задачей. Вы можете использовать функцию MID для возврата 3 символов из строки, начиная с позиции 4 (пропуская первые 2 символа и тире):
= СРЕДНИЙ (A2, 4, 3)
В переводе на английский язык формула гласит: «Посмотрите в ячейку A2, начните извлечение с символа 4 и верните 3 символа».
Однако в реальных рабочих листах подстрока, которую необходимо извлечь, может начинаться в любом месте текстовой строки. В нашем примере вы можете не знать, сколько символов предшествует первому тире. Чтобы справиться с этой проблемой, используйте функцию НАЙТИ, чтобы определить начальную точку подстроки, которую вы хотите получить.
Формула НАЙТИ для возврата положения тире 1 st выглядит следующим образом:
= НАЙТИ ("-", A2)
Поскольку вы хотите начать с символа, следующего за тире, добавьте 1 к возвращаемому значению и вставьте указанную выше функцию во второй аргумент (start_num) функции MID:
=СРЕДН(A2, НАЙТИ("-",A2)+1, 3)
В этом сценарии функция ПОИСК в Excel работает одинаково хорошо:
=СРЕДН(A2, ПОИСК("-",A2)+1, 3)
Замечательно, но что, если группа символов после первого тире содержит другое количество символов? Хм... может быть проблема:
Как видно на снимке экрана выше, формула отлично работает для строк 1 и 2. В строках 4 и 5 вторая группа содержит 4 символа, но возвращаются только первые 3 символа. В строках 6 и 7 во второй группе всего 2 символа, и поэтому наша формула поиска в Excel возвращает после них тире.
Если вы хотите вернуть все символы между 1 st и 2 nd вхождениями определенного символа (тире в этом примере), как бы вы поступили? Вот ответ:
=СРЕДН(A2, НАЙТИ("-",A2)+1, НАЙТИ("-", A2, НАЙТИ("-",A2)+1) - НАЙТИ("-",A2)-1)
Чтобы лучше понять эту формулу MID, давайте рассмотрим ее аргументы один за другим:
- 1 ст аргумент (текст). Это текстовая строка, содержащая символы, которые вы хотите извлечь, ячейка A2 в этом примере.
- 2 nd аргумент (start_position). Определяет позицию первого символа, который вы хотите извлечь. Вы используете функцию НАЙТИ, чтобы найти первый дефис в строке и добавить 1 к этому значению, потому что вы хотите начать с символа, следующего за дефисом: НАЙТИ("-",A2)+1.
- 3 rd аргумент (num_chars). Указывает количество символов, которое вы хотите вернуть. В нашей формуле это самая сложная часть. Вы используете две функции НАЙТИ (или ПОИСК), одна из которых определяет позицию первого тире: НАЙТИ ("-", A2). А другой возвращает позицию второго тире: НАЙТИ("-", A2, НАЙТИ("-",A2)+1). Затем вы вычитаете первое из второго, а затем вычитаете 1, потому что вы не хотите включать ни одно тире. В результате вы получите количество символов между 1 st и 2 nd тире, это именно то, что мы ищем. Итак, вы передаете это значение аргументу num_chars функции MID.
Аналогичным образом вы можете вернуть 3 символа после тире 2 nd :
=СРЕДН(A2, НАЙТИ("-",A2, НАЙТИ("-", A2, НАЙТИ("-",A2)+1) +2), 3)
Или извлеките все символы между тире 2 nd и 3 rd :
=СРЕДН(A2, НАЙТИ("-", A2, НАЙТИ("-",A2)+1)+1, НАЙТИ("-",A2, НАЙТИ("-", A2, НАЙТИ("-" ,A2)+1) +2) - НАЙТИ("-", A2, НАЙТИ("-",A2)+1)-1)
Пример 4.
Поиск текста в скобкахПредположим, у вас есть длинная текстовая строка в столбце A, и вы хотите найти и извлечь только текст, заключенный в скобки.
Для этого вам потребуется функция MID для возврата нужного количества символов из строки, а также функция Excel FIND или SEARCH, чтобы определить, с чего начать и сколько символов нужно извлечь.
=СРЕДН(A2,ПОИСК("(",A2)+1, ПОИСК(")",A2)-ПОИСК("(",A2)-1)
Логика этой формулы аналогична тем, которые мы обсуждали в предыдущем примере. И снова самая сложная часть — это последний аргумент, который сообщает формуле, сколько символов нужно вернуть. Это довольно длинное выражение в аргументе num_chars делает следующее:
- Сначала вы находите положение закрывающей скобки:
ПОИСК(")",A2)
- После этого вы определяете положение открывающей скобки:
ПОИСК("(",A2)
- Затем вы вычисляете разницу между положениями закрывающей и открывающей круглых скобок и вычитаете 1 из этого числа, потому что вы не хотите, чтобы в результате были скобки:
ПОИСК(")",A2)-ПОИСК("( ",А2))-1
Естественно, ничто не мешает вам использовать функцию Excel НАЙТИ вместо ПОИСК, потому что в этом примере нет разницы между регистрозависимостью и регистрозависимостью.