Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/UDF-ки для использования RegExp и их методов - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Готовые решения » UDF-ки для использования RegExp и их методов (Excel)
UDF-ки для использования RegExp и их методов
Manyasha Дата: Четверг, 21.07.2016, 17:55 | Сообщение № 1
Группа: Модераторы
Ранг: Старожил
Сообщений: 1586
Репутация: 661 ±
Замечаний: 0% ±

Excel 2007, 2010
Здравствуйте, уважаемые друзья и коллеги!

Я заметила, что в последнее время на форуме часто стали появляться решения задач с использованием регулярных выражений. В связи с чем, я и сама прониклась этой интересной штуковиной под названием RegExp. ))
Ну а т.к. я человек ленивый, надоело мне каждый раз писать один и тот же кусок кода, меняя в нем только строку шаблона. :D

Соорудила 3 UDF-ки, теперь хочу поделиться ими с вами:
stringRegExpTest - проверяет, соответствует строка шаблону
stringRegExpExecute - ищет в строке подстроки, соответствующие шаблону
stringRegExpReplace - заменяет в строке вхождения, соответствующие шаблону на заданную подстроку.

Шаблоны (Pattern) строятся точно так же, как и при использовании регулярок в VBA.
Свойства Global, IgnoreCase и MultiLine во всех функциях заданы, как необязательные аргументы (дефолтные значения можно поменять на свой вкус).

В файле набросала несколько задач, которые можно решать с помощью регулярных выражений. Т.к. с шаблонами я пока на Вы, примеры не очень сложные. Если у кого-то в закромах есть супер-пупер заумные/полезные шаблоны, предлагаю пополнить ими мой файлик.))

[p.s.]Долго искала тему про RegExp'ы в готовых решениях и Полезных приемах, но так и не нашла... После того, как наклепала свои udf-ки, и практически дописала этот пост, случайно наткнулась в разделе вопросов по Excel на Поговорим про RegExp?))
По приведенной мною ссылке можно найти описания для всех свойств и методов регулярок, а также списки метасимволов для шаблонов.[/p.s.]
К сообщению приложен файл: regExpUDF.xls(56Kb)


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеЗдравствуйте, уважаемые друзья и коллеги!

Я заметила, что в последнее время на форуме часто стали появляться решения задач с использованием регулярных выражений. В связи с чем, я и сама прониклась этой интересной штуковиной под названием RegExp. ))
Ну а т.к. я человек ленивый, надоело мне каждый раз писать один и тот же кусок кода, меняя в нем только строку шаблона. :D

Соорудила 3 UDF-ки, теперь хочу поделиться ими с вами:
stringRegExpTest - проверяет, соответствует строка шаблону
stringRegExpExecute - ищет в строке подстроки, соответствующие шаблону
stringRegExpReplace - заменяет в строке вхождения, соответствующие шаблону на заданную подстроку.

Шаблоны (Pattern) строятся точно так же, как и при использовании регулярок в VBA.
Свойства Global, IgnoreCase и MultiLine во всех функциях заданы, как необязательные аргументы (дефолтные значения можно поменять на свой вкус).

В файле набросала несколько задач, которые можно решать с помощью регулярных выражений. Т.к. с шаблонами я пока на Вы, примеры не очень сложные. Если у кого-то в закромах есть супер-пупер заумные/полезные шаблоны, предлагаю пополнить ими мой файлик.))

[p.s.]Долго искала тему про RegExp'ы в готовых решениях и Полезных приемах, но так и не нашла... После того, как наклепала свои udf-ки, и практически дописала этот пост, случайно наткнулась в разделе вопросов по Excel на Поговорим про RegExp?))
По приведенной мною ссылке можно найти описания для всех свойств и методов регулярок, а также списки метасимволов для шаблонов.[/p.s.]

Автор - Manyasha
Дата добавления - 21.07.2016 в 17:55
SLAVICK Дата: Четверг, 21.07.2016, 19:04 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 1834
Репутация: 613 ±
Замечаний: 0% ±

2007,2010,2013,2016
Соорудила 3 UDF-ки, теперь хочу поделиться ими с вами:

а я пользуюсь только 2-мя. :D :
RegExpFindReplace и RegExpFind.

Докину еще парочку ссылок, если не возражаешь:
тут я нашел когда то - готовый тестер регулярок с Юдф-ками, похожими на твои :D .
RegExpFindReplace
RegExpFind
RegExpTest
Сам файл - тестер в приложении.
А это, для меня, просто незаменимый сайт для создания и наглядной проверки регулярок. там же есть куча готовых шаблонов в разделе "community"
К сообщению приложен файл: RegExp_Tester.xlsm(31Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Соорудила 3 UDF-ки, теперь хочу поделиться ими с вами:

а я пользуюсь только 2-мя. :D :
RegExpFindReplace и RegExpFind.

Докину еще парочку ссылок, если не возражаешь:
тут я нашел когда то - готовый тестер регулярок с Юдф-ками, похожими на твои :D .
RegExpFindReplace
RegExpFind
RegExpTest
Сам файл - тестер в приложении.
А это, для меня, просто незаменимый сайт для создания и наглядной проверки регулярок. там же есть куча готовых шаблонов в разделе "community"

Автор - SLAVICK
Дата добавления - 21.07.2016 в 19:04
RAN Дата: Четверг, 21.07.2016, 19:43 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4277
Репутация: 829 ±
Замечаний: 0% ±

2010
лень матушка от ikki
это же есть и где-то на Планете


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщениелень матушка от ikki
это же есть и где-то на Планете

Автор - RAN
Дата добавления - 21.07.2016 в 19:43
Manyasha Дата: Четверг, 21.07.2016, 22:21 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 1586
Репутация: 661 ±
Замечаний: 0% ±

Excel 2007, 2010
Спасибо за ссылки и примеры!)) Все себе понатырила :)


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеСпасибо за ссылки и примеры!)) Все себе понатырила :)

Автор - Manyasha
Дата добавления - 21.07.2016 в 22:21
PowerBoy Дата: Пятница, 22.07.2016, 08:03 | Сообщение № 5
Группа: Проверенные
Ранг: Участник
Сообщений: 86
Репутация: 29 ±
Замечаний: 0% ±

2003
Я использую свою функцию, объединенную из stringRegExpExecute и stringRegExpReplace

Синтаксис
=ATREGEX(Строка,Шаблон,[НомерСовпадения],[НоваяСтрока],[ИгнорироватьРегистр],[Глобально])

Ниже перечислены аргументы:Элемент Описание
Строка Обрабатываемая строка
Шаблон Шаблон регулярного выражения
НомерСовпадения Вернуть совпадение по номеру.
0 - вернуть список совпадений через запятую.
-1 - вернуть количество совпадений.
-2 - вернуть сумму чисел совпадений.
НоваяСтрока Заменить совпадения на новую строку
ИгнорироватьРегистр Игнорировать регистр букв. (Вкл. по умолчанию)
Глобально Применить ко всем. (Вкл. по умолчанию)

[vba]
Код

Public Function ATREGEX(ByRef text As Variant, _
                        ByRef pattern As Variant, _
                        Optional ByVal num_submatch As Long = -10, _
                        Optional ByRef new_text As Variant = "", _
                        Optional ByVal is_ignoreCase As Boolean = True, _
                        Optional ByVal is_global As Boolean = True) As Variant

Dim objRegex
Dim colMatch
Dim sMatchString As String
Dim sSumMatch As Double
Dim i As Integer

On Error GoTo err_

ATREGEX = ""

Set objRegex = CreateObject("vbscript.regexp")

With objRegex
    .Global = is_global
    .IgnoreCase = is_ignoreCase
    .pattern = pattern
End With

If num_submatch >= -9 Then
    Set colMatch = objRegex.Execute(text)
    
    If num_submatch = -1 Then
        ATREGEX = colMatch.Count
        Exit Function
    End If
    
    If num_submatch = -2 Then
        sSumMatch = 0
        For i = 0 To colMatch.Count - 1
            sSumMatch = sSumMatch + CDbl(colMatch(i).Value)
        Next
        ATREGEX = sSumMatch
        Exit Function
    End If
    
    If colMatch.Count = 0 Then
        ATREGEX = ""
    Else
        If num_submatch = 0 Then
            sMatchString = ""
            For i = 0 To colMatch.Count - 1
                sMatchString = sMatchString + CStr(colMatch(i).Value) + ","
            Next
            ATREGEX = Left(sMatchString, Len(sMatchString) - 1)
        Else
            ATREGEX = colMatch(num_submatch - 1)
        End If
    End If
Else
    ATREGEX = objRegex.Replace(text, new_text)
End If

err_:
End Function
[/vba]

=ATREGEX("вер5мод12";"\d+") => вермод
=ATREGEX("вер5мод12";"\d+";1) => 5
=ATREGEX("вер5мод12";"\d+";2) => 12
=ATREGEX("вер5мод12";"\d+";0) => 5,12
=ATREGEX("вер5мод12";"\d+";-1) =>2
=ATREGEX("вер5мод12";"\d+";-2) =>17
=ATREGEX("вер5мод12";"\d+";;"AA") => верAAмодAA


Excel + SQL = ActiveTables (http://vk.com/club72446554)
 
Ответить
СообщениеЯ использую свою функцию, объединенную из stringRegExpExecute и stringRegExpReplace

Синтаксис
=ATREGEX(Строка,Шаблон,[НомерСовпадения],[НоваяСтрока],[ИгнорироватьРегистр],[Глобально])

Ниже перечислены аргументы:Элемент Описание
Строка Обрабатываемая строка
Шаблон Шаблон регулярного выражения
НомерСовпадения Вернуть совпадение по номеру.
0 - вернуть список совпадений через запятую.
-1 - вернуть количество совпадений.
-2 - вернуть сумму чисел совпадений.
НоваяСтрока Заменить совпадения на новую строку
ИгнорироватьРегистр Игнорировать регистр букв. (Вкл. по умолчанию)
Глобально Применить ко всем. (Вкл. по умолчанию)

[vba]
Код

Public Function ATREGEX(ByRef text As Variant, _
                        ByRef pattern As Variant, _
                        Optional ByVal num_submatch As Long = -10, _
                        Optional ByRef new_text As Variant = "", _
                        Optional ByVal is_ignoreCase As Boolean = True, _
                        Optional ByVal is_global As Boolean = True) As Variant

Dim objRegex
Dim colMatch
Dim sMatchString As String
Dim sSumMatch As Double
Dim i As Integer

On Error GoTo err_

ATREGEX = ""

Set objRegex = CreateObject("vbscript.regexp")

With objRegex
    .Global = is_global
    .IgnoreCase = is_ignoreCase
    .pattern = pattern
End With

If num_submatch >= -9 Then
    Set colMatch = objRegex.Execute(text)
    
    If num_submatch = -1 Then
        ATREGEX = colMatch.Count
        Exit Function
    End If
    
    If num_submatch = -2 Then
        sSumMatch = 0
        For i = 0 To colMatch.Count - 1
            sSumMatch = sSumMatch + CDbl(colMatch(i).Value)
        Next
        ATREGEX = sSumMatch
        Exit Function
    End If
    
    If colMatch.Count = 0 Then
        ATREGEX = ""
    Else
        If num_submatch = 0 Then
            sMatchString = ""
            For i = 0 To colMatch.Count - 1
                sMatchString = sMatchString + CStr(colMatch(i).Value) + ","
            Next
            ATREGEX = Left(sMatchString, Len(sMatchString) - 1)
        Else
            ATREGEX = colMatch(num_submatch - 1)
        End If
    End If
Else
    ATREGEX = objRegex.Replace(text, new_text)
End If

err_:
End Function
[/vba]

=ATREGEX("вер5мод12";"\d+") => вермод
=ATREGEX("вер5мод12";"\d+";1) => 5
=ATREGEX("вер5мод12";"\d+";2) => 12
=ATREGEX("вер5мод12";"\d+";0) => 5,12
=ATREGEX("вер5мод12";"\d+";-1) =>2
=ATREGEX("вер5мод12";"\d+";-2) =>17
=ATREGEX("вер5мод12";"\d+";;"AA") => верAAмодAA

Автор - PowerBoy
Дата добавления - 22.07.2016 в 08:03
SLAVICK Дата: Пятница, 22.07.2016, 11:53 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 1834
Репутация: 613 ±
Замечаний: 0% ±

2007,2010,2013,2016
лень матушка от ikki

вот это ikki соорудил монстра - пока понял что к чему %) . пусть земля ему будет пухом.

Я использую свою функцию, объединенную из stringRegExpExecute и stringRegExpReplace

Интересная задумка.

Позволю себе дать несколько пожеланий.
вернуть список совпадений через запятую.

лучше разделитель - сделать опционным с возможностью изменения а то вдруг нужно вытянуть тексты с запятой :o .

-2 - вернуть сумму чисел совпадений.

Как по мне, сумма чисел - лишняя плюшка. (лично для меня -- я редко вытаскиваю именно числа, не говоря уж об их суммировании)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
лень матушка от ikki

вот это ikki соорудил монстра - пока понял что к чему %) . пусть земля ему будет пухом.

Я использую свою функцию, объединенную из stringRegExpExecute и stringRegExpReplace

Интересная задумка.

Позволю себе дать несколько пожеланий.
вернуть список совпадений через запятую.

лучше разделитель - сделать опционным с возможностью изменения а то вдруг нужно вытянуть тексты с запятой :o .

-2 - вернуть сумму чисел совпадений.

Как по мне, сумма чисел - лишняя плюшка. (лично для меня -- я редко вытаскиваю именно числа, не говоря уж об их суммировании)

Автор - SLAVICK
Дата добавления - 22.07.2016 в 11:53
Мир MS Excel » Вопросы и решения » Готовые решения » UDF-ки для использования RegExp и их методов (Excel)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!