Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
 Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
Добрый день! Есть вопрос по регулярным выражениям с использованием VBA
Кто подскажет?

Есть строка: "ВВГНГ(А) 3x2,5x10 * CFD "

Необходимо из строки, выделить сечения - 3x2,5x10

Правило 1 - "([\d,\,]+[\x|\х][\d,\,]+)"
Находит - 3x2,5

Правило 2 - "([\x|\х]([\d,\,]+)
Находит - 2,5x10

Пытался объединить два правила, но не работает. ([\d,\,]+)[\x|\х]([\d,\,]+)[\x|\х]([\d,\,]+)



Ниже подпрограмма VBA:

Sub Search_Reg()
        Dim Str1 As String
        Dim Str2 As String
        Dim L As Integer
        
           Set objRegExp = CreateObject("VBScript.RegExp")
               'objRegExp.Pattern = "([\d,\,]+[\x|\х][\d,\,]+)"  ' ищет 3x2,5
               
                objRegExp.Pattern = "([\d,\,]+)[\x|\х]([\d,\,]+)[\x|\х]([\d,\,]+)"  ' ищет 2,5x10
               
        Str1 = "ВВГНГ(А) 3x2,5 *"
             
        Str2 = "ВВГНГ(А) 3x2,5x10 * CFD "
                
        Res = objRegExp.Test(Str2)
        
        Set objMatches = objRegExp.Execute(Str2)
        L = objMatches.Count
                  For i = 0 To objMatches.Count - 1
                      Set objMatch = objMatches.Item(i)
                      ' MsgBox objMatch.Value
                  Next i
                                                    
        MsgBox "В строке""" & Str & """" & Chr(13) & "Найдено " & "[" & objMatches.Count & "]" & _
                Chr(13) & "Вхождений по шаблону """ & objRegExp.Pattern & "''" & Chr(13) & "Найдено сечение: " & objMatch & ""                           
        
End Sub

Модератор: Учимся использовать тэги оформления кода - FAQ
23 апр 19, 15:25    [21869883]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
Yuri KR
не работает.
А что именно не работает?

К сообщению приложен файл. Размер - 17Kb
23 апр 19, 15:35    [21869890]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
Да, нужно уточнить...

Если выполнить код для строки Str1, то 3x2,5 - не обнаруживается
Для Str1 - ищет правило 1
Для Str2 - ищет правило 2

Общее правило не видит первую часть....


Str1 = "ВВГНГ(А) 3x2,5 *"

Str2 = "ВВГНГ(А) 3x2,5x10 * CFD "


т.е Res = objRegExp.Test(Str1)
Set objMatches = objRegExp.Execute(Str1) ' работает корректно в правилом1

Res = objRegExp.Test(Str2) ' ' работает корректно в правилом2
Set objMatches = objRegExp.Execute(Str2)
23 апр 19, 15:51    [21869914]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
Если я правильно понял задачу, то вот такой паттерн
"[\d,]+[xх][\d,]+([xх][\d,]+)?"
23 апр 19, 16:15    [21869932]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
да, спасибо, работает! Ищется в разных вариантах...

единственно хочу уточнить... я писал x|х только потому, что в строке может встречаться "х" латинская буква или "х" кириллица

В вашем варианте "xx" - что означает ?

и как тогда учесть, что "х" бывает русской или латинской буквой ?
23 апр 19, 16:34    [21869955]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18827
Yuri KR
Есть строка: "ВВГНГ(А) 3x2,5x10 * CFD "

Необходимо из строки, выделить сечения - 3x2,5x10

А просто
Split(StrX)(1)
чем не устраивает?
23 апр 19, 16:39    [21869958]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
Yuri KR
В вашем варианте "xx" - что означает ?
Это вас надо спросить, что означают все эти [\d,\,] и [\x|\х]. Читайте синтаксис регулярок, я написал, как должно быть.
23 апр 19, 16:49    [21869974]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
А какой результат у вас возвращает ? - Split(StrX)(1)
У меня ошибка ....
23 апр 19, 16:49    [21869977]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
Shocker.Pro, спасибо огромное! все работает правильно....
23 апр 19, 17:07    [21869993]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18827
Yuri KR
А какой результат у вас возвращает ? - Split(StrX)(1)
У меня ошибка ....
Следи за руками:

К сообщению приложен файл. Размер - 3Kb
24 апр 19, 08:15    [21870272]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
Akina, добрый день! Ваш вариант также работает корректно

Str2 = "ВВГнг(А) 3х1,5x10 (AB) " :? Split(Str2)(1)
3х1,5x10

Но вот есть записи, которые идут без пробела и там есть уже нюанс...

Str2 = "ВВГнг(А) 3х1,5x10(NP) *" :? Split(Str2)(1)
3х1,5x10(NP)
24 апр 19, 14:21    [21870573]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18827
Yuri KR
и там есть уже нюанс
Это называется "задача определена неполностью".
24 апр 19, 16:09    [21870738]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
Akina, в принципе, да ...
Но этим можно пренебречь в данном случае из-за кол-ва таких записей и вообще обозначить условия к записям и тем, кто их присылает...
Спасибо!
24 апр 19, 16:24    [21870759]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 902
Yuri KR,
Option Explicit

Sub Test_Reg()
  Dim Str As String
  Str = "ВВГНГ(А) 3x2,5 *"
  Search_Reg (Str)
  Str = "ВВГНГ(А) 3x2,5x10 * CFD"
  Search_Reg (Str)
End Sub

Sub Search_Reg(Str As String)
  Dim objRegExp As Variant
  Dim objMatches As Variant
  Dim objMatch As Variant
  Dim cnt As Integer, i As Integer
  Set objRegExp = CreateObject("VBScript.RegExp")
  objRegExp.Pattern = "((?:\d+(?:,\d+)?x?)+)"
  Set objMatches = objRegExp.Execute(Str)
  cnt = objMatches.Count
  For i = 0 To cnt - 1
    Set objMatch = objMatches.Item(i)
    Report_Reg Str, cnt, objRegExp.Pattern, objMatch
  Next i
End Sub

Sub Report_Reg(Str As String, Count As Integer, Pattern As String, Match As Variant)
  MsgBox "В строке""" & Str & """" & Chr(13) & _
         "Найдено " & "[" & Count & "]" & Chr(13) & _
         "Вхождений по шаблону """ & Pattern & "''" & Chr(13) & _
         "Найдено сечение: " & Match & ""
End Sub
14 май 19, 11:01    [21884153]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
Руслан Дамирович, добрый день!

Спасибо за подсказку в оптимизации кода и приведению к стандартному виду!
15 май 19, 09:54    [21884997]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
Руслан Дамирович, к сожалению, регулярное выражение видит только "x" - латинское
А ''х'' - кириллица не выделяется.

Может все таки ставить x|х или [xх] - ?
15 май 19, 10:59    [21885062]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 902
Yuri KR
Руслан Дамирович, к сожалению, регулярное выражение видит только "x" - латинское
А ''х'' - кириллица не выделяется.

Может все таки ставить x|х или [xх] - ?

[xх] и обязательно заменять х на x в найденном

Для отладки регулярных выражений рекомендую обзавестись regexbuddy или пользоваться любым онлайн ресурсом
например, ваш пример
15 май 19, 12:59    [21885184]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
Руслан Дамирович, спасибо, все красиво !

Использую для он-лайн работы ресурс: https://regexr.com/
15 май 19, 16:15    [21885499]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по регулярным выражениям с использованием VBA  [new]
Yuri KR
Member

Откуда:
Сообщений: 145
Руслан Дамирович,

.....[xх] и обязательно заменять х на x в найденном

Интересно, а можно ли в найденном заменять функционалом регулярных выражений ?

Например, "х" кириллицу на "x" латиницу ....

Или замена уже классическим методом выполняется?
16 май 19, 15:12    [21886359]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Office Ответить