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

Вход

Регистрация

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

 

= Мир MS Excel/Регулярные выражения ReGExP - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Регулярные выражения ReGExP (Макросы/Sub)
Регулярные выражения ReGExP
Miuki Дата: Среда, 04.12.2019, 22:56 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый день, Господа! Написал шаблон регулярного выражения и не могу довести его до ума.
[vba]
Код
Function Парсинг(строка As String, Optional место As String) As Variant
       Dim prov As Boolean 'Переменная, служащая для проверки строки по шаблону
    Dim myR As RegExp 'Объктная переменная для создания шаблона с регулярным выражением
    Dim myCollection As MatchCollection
    Dim myMatch As Match
'Начало кода
Set myR = New RegExp
myR.Global = True
myR.IgnoreCase = True
myR.Pattern = "\d{1,4}\.*\d*(_| )?(бис|упл|ур|у|р)?[^а-яё]?(\(|_)?(расш)?\)?" 'шаблон регулярного выражения
prov = myR.Test(строка)
    If prov Then
        Set myCollection = myR.Execute(строка)
    Else
    Парсинг = "Объект не определен"
        Exit Function
    End If
            x = myCollection(0)
            x = LCase(x)
            x = Replace(x, "_", "")
            x = Replace(x, "(", "")
            x = Replace(x, " ", "")
                        
Парсинг = x
End Function
[/vba]
Приложил файл с примером-там обозначил, что требуется. Может это невозможно через регулярки сделать, а я сижу голову "ломаю".
Может кто подскажет? Заранее благодарю!
К сообщению приложен файл: 7887363.xlsm (17.6 Kb)


Сообщение отредактировал Miuki - Четверг, 05.12.2019, 05:32
 
Ответить
СообщениеДобрый день, Господа! Написал шаблон регулярного выражения и не могу довести его до ума.
[vba]
Код
Function Парсинг(строка As String, Optional место As String) As Variant
       Dim prov As Boolean 'Переменная, служащая для проверки строки по шаблону
    Dim myR As RegExp 'Объктная переменная для создания шаблона с регулярным выражением
    Dim myCollection As MatchCollection
    Dim myMatch As Match
'Начало кода
Set myR = New RegExp
myR.Global = True
myR.IgnoreCase = True
myR.Pattern = "\d{1,4}\.*\d*(_| )?(бис|упл|ур|у|р)?[^а-яё]?(\(|_)?(расш)?\)?" 'шаблон регулярного выражения
prov = myR.Test(строка)
    If prov Then
        Set myCollection = myR.Execute(строка)
    Else
    Парсинг = "Объект не определен"
        Exit Function
    End If
            x = myCollection(0)
            x = LCase(x)
            x = Replace(x, "_", "")
            x = Replace(x, "(", "")
            x = Replace(x, " ", "")
                        
Парсинг = x
End Function
[/vba]
Приложил файл с примером-там обозначил, что требуется. Может это невозможно через регулярки сделать, а я сижу голову "ломаю".
Может кто подскажет? Заранее благодарю!

Автор - Miuki
Дата добавления - 04.12.2019 в 22:56
anvg Дата: Пятница, 06.12.2019, 15:10 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток.
В рамках представленного примера что на что, можно так
[vba]
Код
Public Function getFoo(ByVal fromText As String) As String
    Dim pReg As Object, pItems As Object, sResult As String, sItem
    Set pReg = CreateObject("VBScript.RegExp")
    pReg.Pattern = "(\d{1,4}\.*\d*)(?:[^\dа-я]*(расш|у(?!г)))?(?:[^\dа-я]*(расш|у(?!г)))?"
    Set pItems = pReg.Execute(fromText)
    If pItems.Count > 0 Then
        For Each sItem In pItems(0).SubMatches
            sResult = sResult & sItem
        Next
    End If
    getFoo = sResult
End Function
[/vba]


Сообщение отредактировал anvg - Пятница, 06.12.2019, 15:11
 
Ответить
СообщениеДоброе время суток.
В рамках представленного примера что на что, можно так
[vba]
Код
Public Function getFoo(ByVal fromText As String) As String
    Dim pReg As Object, pItems As Object, sResult As String, sItem
    Set pReg = CreateObject("VBScript.RegExp")
    pReg.Pattern = "(\d{1,4}\.*\d*)(?:[^\dа-я]*(расш|у(?!г)))?(?:[^\dа-я]*(расш|у(?!г)))?"
    Set pItems = pReg.Execute(fromText)
    If pItems.Count > 0 Then
        For Each sItem In pItems(0).SubMatches
            sResult = sResult & sItem
        Next
    End If
    getFoo = sResult
End Function
[/vba]

Автор - anvg
Дата добавления - 06.12.2019 в 15:10
Miuki Дата: Пятница, 06.12.2019, 18:18 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
anvg, Спасибо огромное! hands
Только начал вникать в эти регулярные выражения-это конечно мощь, если разобраться.
 
Ответить
Сообщениеanvg, Спасибо огромное! hands
Только начал вникать в эти регулярные выражения-это конечно мощь, если разобраться.

Автор - Miuki
Дата добавления - 06.12.2019 в 18:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Регулярные выражения ReGExP (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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