Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вопрос по регулярным выражениям с использованием VBA / 19 сообщений из 19, страница 1 из 1
23.04.2019, 15:25
    #39805432
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Добрый день! Есть вопрос по регулярным выражениям с использованием VBA
Кто подскажет?

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

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

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

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

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



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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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
...
Рейтинг: 0 / 0
23.04.2019, 15:35
    #39805437
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Yuri KRне работает.А что именно не работает?
...
Рейтинг: 0 / 0
23.04.2019, 15:51
    #39805445
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Да, нужно уточнить...

Если выполнить код для строки 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)
...
Рейтинг: 0 / 0
23.04.2019, 16:15
    #39805451
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Если я правильно понял задачу, то вот такой паттерн
Код: vbnet
1.
"[\d,]+[xх][\d,]+([xх][\d,]+)?"
...
Рейтинг: 0 / 0
23.04.2019, 16:34
    #39805463
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
да, спасибо, работает! Ищется в разных вариантах...

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

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

и как тогда учесть, что "х" бывает русской или латинской буквой ?
...
Рейтинг: 0 / 0
23.04.2019, 16:39
    #39805464
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Yuri KRЕсть строка: "ВВГНГ(А) 3x2,5x10 * CFD "

Необходимо из строки, выделить сечения - 3x2,5x10
А просто
Код: vbnet
1.
Split(StrX)(1)

чем не устраивает?
...
Рейтинг: 0 / 0
23.04.2019, 16:49
    #39805474
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Yuri KRВ вашем варианте "xx" - что означает ?Это вас надо спросить, что означают все эти [\d,\,] и [\x|\х]. Читайте синтаксис регулярок, я написал, как должно быть.
...
Рейтинг: 0 / 0
23.04.2019, 16:49
    #39805477
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
А какой результат у вас возвращает ? - Split(StrX)(1)
У меня ошибка ....
...
Рейтинг: 0 / 0
23.04.2019, 17:07
    #39805486
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Shocker.Pro, спасибо огромное! все работает правильно....
...
Рейтинг: 0 / 0
24.04.2019, 08:15
    #39805613
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Yuri KRА какой результат у вас возвращает ? - Split(StrX)(1)
У меня ошибка ....Следи за руками:
...
Рейтинг: 0 / 0
24.04.2019, 14:21
    #39805760
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Akina, добрый день! Ваш вариант также работает корректно

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

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

Str2 = "ВВГнг(А) 3х1,5x10(NP) *" :? Split(Str2)(1)
3х1,5x10(NP)
...
Рейтинг: 0 / 0
24.04.2019, 16:09
    #39805835
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Yuri KRи там есть уже нюансЭто называется "задача определена неполностью".
...
Рейтинг: 0 / 0
24.04.2019, 16:24
    #39805850
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Akina, в принципе, да ...
Но этим можно пренебречь в данном случае из-за кол-ва таких записей и вообще обозначить условия к записям и тем, кто их присылает...
Спасибо!
...
Рейтинг: 0 / 0
14.05.2019, 11:01
    #39812859
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Yuri KR,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
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
...
Рейтинг: 0 / 0
15.05.2019, 09:54
    #39813360
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Руслан Дамирович, добрый день!

Спасибо за подсказку в оптимизации кода и приведению к стандартному виду!
...
Рейтинг: 0 / 0
15.05.2019, 10:59
    #39813411
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Руслан Дамирович, к сожалению, регулярное выражение видит только "x" - латинское
А ''х'' - кириллица не выделяется.

Может все таки ставить x|х или [xх] - ?
...
Рейтинг: 0 / 0
15.05.2019, 12:59
    #39813488
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Yuri KRРуслан Дамирович, к сожалению, регулярное выражение видит только "x" - латинское
А ''х'' - кириллица не выделяется.

Может все таки ставить x|х или [xх] - ?
[xх] и обязательно заменять х на x в найденном

Для отладки регулярных выражений рекомендую обзавестись regexbuddy или пользоваться любым онлайн ресурсом
например, ваш пример
...
Рейтинг: 0 / 0
15.05.2019, 16:15
    #39813661
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Руслан Дамирович, спасибо, все красиво !

Использую для он-лайн работы ресурс: https://regexr.com/
...
Рейтинг: 0 / 0
16.05.2019, 15:12
    #39814100
Yuri KR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по регулярным выражениям с использованием VBA
Руслан Дамирович,

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

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

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

Или замена уже классическим методом выполняется?
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вопрос по регулярным выражениям с использованием VBA / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]