powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вопрос по регулярным выражениям с использованием VBA
19 сообщений из 19, страница 1 из 1
Вопрос по регулярным выражениям с использованием VBA
    #39805432
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Есть вопрос по регулярным выражениям с использованием 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
Вопрос по регулярным выражениям с использованием VBA
    #39805437
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KRне работает.А что именно не работает?
...
Рейтинг: 0 / 0
Вопрос по регулярным выражениям с использованием VBA
    #39805445
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, нужно уточнить...

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

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

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

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

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

чем не устраивает?
...
Рейтинг: 0 / 0
Вопрос по регулярным выражениям с использованием VBA
    #39805474
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KRВ вашем варианте "xx" - что означает ?Это вас надо спросить, что означают все эти [\d,\,] и [\x|\х]. Читайте синтаксис регулярок, я написал, как должно быть.
...
Рейтинг: 0 / 0
Вопрос по регулярным выражениям с использованием VBA
    #39805477
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А какой результат у вас возвращает ? - Split(StrX)(1)
У меня ошибка ....
...
Рейтинг: 0 / 0
Вопрос по регулярным выражениям с использованием VBA
    #39805486
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, спасибо огромное! все работает правильно....
...
Рейтинг: 0 / 0
Вопрос по регулярным выражениям с использованием VBA
    #39805613
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KRА какой результат у вас возвращает ? - Split(StrX)(1)
У меня ошибка ....Следи за руками:
...
Рейтинг: 0 / 0
Вопрос по регулярным выражениям с использованием VBA
    #39805760
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Вопрос по регулярным выражениям с использованием VBA
    #39805835
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KRи там есть уже нюансЭто называется "задача определена неполностью".
...
Рейтинг: 0 / 0
Вопрос по регулярным выражениям с использованием VBA
    #39805850
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, в принципе, да ...
Но этим можно пренебречь в данном случае из-за кол-ва таких записей и вообще обозначить условия к записям и тем, кто их присылает...
Спасибо!
...
Рейтинг: 0 / 0
Вопрос по регулярным выражениям с использованием VBA
    #39812859
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по регулярным выражениям с использованием VBA
    #39813360
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руслан Дамирович, добрый день!

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

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

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

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

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

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

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

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

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


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