Всем привет.
Текст_для_поиска — это текст, в котором нужно найти искомый_текст.
Нач_позиция — это номер символа в тексте текст_для_поиска, с которого следует начать поиск.
Если аргумент опущен, то он полагается равным 1.
Если нач_позиция не больше 0 или больше, чем длина аргумента текст_для_поиска, то возвращается значение ошибки #ЗНАЧ!.
Зачем мне что-то еще?
Дело в том что все зависит от поставленной задачи. Например, одной из самых трудоемких и неприятных задач при работе с текстом в Excel является парсинг - разбор буквенно-цифровой "каши" на составляющие и извлечение из нее нужных нам фрагментов.
Например:
Как я говорил выше, регулярные выражения - это очень мощный и красивый инструмент, на порядок превосходящий по возможностям все остальные способы работы с текстом. Многие языки программирования (C#, PHP, Perl, JavaScript...) и текстовые редакторы (Word, Notepad++...) поддерживают регулярные выражения.
Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String
On Error GoTo ErrHandl
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = Pattern
regex.Global = True
If regex.Test(Text) Then
Set matches = regex.Execute(Text)
RegExpExtract = matches.Item(Item - 1)
Exit Function
End If
ErrHandl:
RegExpExtract = CVErr(xlErrValue)
End Function
Теперь можно закрыть редактор Visual Basic и, вернувшись в Excel, опробовать нашу новую функцию. Синтаксис у нее следующий:
=RegExpExtract( Txt ; Pattern ; Item )
где
Txt - ячейка с текстом, который мы проверяем и из которого хотим извлечь нужную нам подстроку
Pattern - маска (шаблон) для поиска подстроки
Item - порядковый номер подстроки, которую надо извлечь, если их несколько (если не указан, то выводится первое вхождение).
Все, начинка для Excel готова. Подробнее как с этим работать читайте здесь.
Для любопытных могу рекомендовать книги про RegExp:
Они легко находятся в сети. Успехов.
Каждый из вас слышал про Регулярные выражения (Regexp). Они применимы в почти в любом языке программирования и многих редакторах.
Regexp представляет собой группу символов или знаков, которая используется для поиска определенного текстового шаблона. Другими словами Регулярное выражение – это шаблон, который обработчик регулярных выражений пытается сопоставить с введенным текстом. Шаблон состоит из одно-символьных или много-символьных литералов, операторов или конструкций.
К Regexp приходят многие хотя этот путь не близкий. После того как их прочувствуешь понимаешь что как же ты их не использовал ранее.
Regexp можно использовать даже в Excel. Но, скажете вы, в уважаемом Excel есть же функция ПОИСК(искомый_текст;текст_для_поиска;нач_позиция).
Где Искомый_текст — это искомый текст. Можно использовать символы шаблона знак вопроса (?) и звездочка (*) в аргументе искомый_текст. Знак вопроса соответствует любому символу; звездочка соответствует любой последовательности символов. Если нужно найти символ знак вопроса или звездочку, то следует поставить перед ними знак тильда (~). Если искомый_текст не найден, то возвращается значение ошибки #ЗНАЧ!.
Текст_для_поиска — это текст, в котором нужно найти искомый_текст.
Нач_позиция — это номер символа в тексте текст_для_поиска, с которого следует начать поиск.
Если аргумент опущен, то он полагается равным 1.
Если нач_позиция не больше 0 или больше, чем длина аргумента текст_для_поиска, то возвращается значение ошибки #ЗНАЧ!.
Зачем мне что-то еще?
Дело в том что все зависит от поставленной задачи. Например, одной из самых трудоемких и неприятных задач при работе с текстом в Excel является парсинг - разбор буквенно-цифровой "каши" на составляющие и извлечение из нее нужных нам фрагментов.
Например:
- извлечение почтового индекса из адреса (хорошо, если индекс всегда в начале, а если нет?)
- нахождение номера и даты счета из описания платежа в банковской выписке
- извлечение ИНН из разношерстных описаний компаний в списке контрагентов
- поиск номера автомобиля или артикула товара в описании и т.д.
Как я говорил выше, регулярные выражения - это очень мощный и красивый инструмент, на порядок превосходящий по возможностям все остальные способы работы с текстом. Многие языки программирования (C#, PHP, Perl, JavaScript...) и текстовые редакторы (Word, Notepad++...) поддерживают регулярные выражения.
Microsoft Excel, к сожалению, не имеет поддержки RegExp по-умолчанию "из коробки", но это легко исправить с помощью VBA. Откройте редактор Visual Basic с вкладки Разработчик (Developer) или сочетанием клавиш Alt+F11. Затем вставьте новый модуль через меню Insert - Module и скопируйте туда текст вот такой макрофункции:
Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String
On Error GoTo ErrHandl
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = Pattern
regex.Global = True
If regex.Test(Text) Then
Set matches = regex.Execute(Text)
RegExpExtract = matches.Item(Item - 1)
Exit Function
End If
ErrHandl:
RegExpExtract = CVErr(xlErrValue)
End Function
Теперь можно закрыть редактор Visual Basic и, вернувшись в Excel, опробовать нашу новую функцию. Синтаксис у нее следующий:
=RegExpExtract( Txt ; Pattern ; Item )
где
Txt - ячейка с текстом, который мы проверяем и из которого хотим извлечь нужную нам подстроку
Pattern - маска (шаблон) для поиска подстроки
Item - порядковый номер подстроки, которую надо извлечь, если их несколько (если не указан, то выводится первое вхождение).
Все, начинка для Excel готова. Подробнее как с этим работать читайте здесь.
Для любопытных могу рекомендовать книги про RegExp:
- Бен Форта - Регулярные выражения (10 минут на урок), 2005
- Джеффри Фридл - Регулярные выражения, 3-е издание, 2008
- Фицджеральд М. - Регулярные выражения, Основы, 2015
- Ян Гойвертс, Стивен Левитан - Регулярные выражения. Сборник рецептов, 2-е издание, 2015.
Они легко находятся в сети. Успехов.
No comments:
Post a Comment
А что вы думаете по этому поводу?