powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Регулярные выражения
8 сообщений из 8, страница 1 из 1
Регулярные выражения
    #36344166
Nevsky2006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Помогите знающие люди с регулярными выражениями.
1) Есть файл с данными типа

\Z0001#1.8.0(04468.197*kWh)
\Z0001#1.8.0*10(04449.596*kWh)____________повтор индекса
\Z0001#1.8.0*09(04395.260*kWh)
\Z0001#1.8.0*08(04344.854*kWh)
\Z0001#1.8.0*10(03718.676*kWh)____________повтор индекса
\Z0001#1.8.0*09(03624.595*kWh)
\Z0001#1.8.0*08(03553.404*kWh)

В идеале мне нужно выбрать только значение (цифры до *kWh). В принципе все получилось, но вот столкнулся с двойственностью кодов ( например \Z0001#1.8.0* 10 ). В итоге я получаю строку типа 04449.59603718.676 Можно как то этому помочь?

2) Я использую несколько pattern. Первый pattern="1.8.0\*10(.*?)\)". Получаю \Z0001#1.8.0*10(04449.596*kWh)\Z0001#1.8.0*10(03718.676*kWh) Как можно указать, чтобы останавливался на первом вхождении. Этого будет достаточно.
Спасибо.
...
Рейтинг: 0 / 0
Регулярные выражения
    #36344251
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
Вы делаете кодом, или формулами ? Расскажите подробней
...
Рейтинг: 0 / 0
Регулярные выражения
    #36344394
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А теперь еще раз.
Покажи пример настоящих данных. А то в первом примере у тебя данные по строкам, а во втором несколько строк слиты в одну.
Покажи пример текста и скажи что именно надо из него вытащить.

Nevsky2006В идеале мне нужно выбрать только значение (цифры до *kWh). В принципе все получилось, но вот столкнулся с двойственностью кодов ( например \Z0001#1.8.0* 10 ). В итоге я получаю строку типа 04449.59603718.676 Можно как то этому помочь?Я не вижу тут никакой двойственности.
чтобы из строки \Z0001#1.8.0*10(04449.596*kWh) вытащить 04449.596 достаточно прогнать ее через:
Код: plaintext
1.
re.pattern = "(\d+\.\d+)\*kWh"
debug.print re.execute("\Z0001#1.8.0*10(04449.596*kWh)").item( 0 ).submatches( 0 )

Nevsky20062) Я использую несколько pattern. Первый pattern="1.8.0\*10(.*?)\)". Получаю \Z0001#1.8.0*10(04449.596*kWh)\Z0001#1.8.0*10(03718.676*kWh) Как можно указать, чтобы останавливался на первом вхождении. Этого будет достаточно.
Спасибо.Заканчивать шаблон комбинацией ".*?" это хорошо.... Это значит "читать чуть-чуть, отсюда и до бесконечности".
...
Рейтинг: 0 / 0
Регулярные выражения
    #36344792
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если просто формулой?
=ПСТР(A1;НАЙТИ("(";A1)+1;НАЙТИ(")";A1)-НАЙТИ("(";A1)-5)
С преобразованием в число:
=ПОДСТАВИТЬ(ПСТР(...);".";",")*1
Пример в файле.
...
Рейтинг: 0 / 0
Регулярные выражения
    #36346926
Nevsky2006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы. Особенно White Owl. submatches - очень помогло.
Несколько раз переписывал ответ. Пока письменно пытаюсь объяснить, что мне надо, как самому доходит. :) Но есть некоторые моменты "недошедшие".
Делаю в коде.
Есть файлы (см вложение). Их много. В файлах существуют определенные коды (OBIS), могут быть записаны в любой последовательности, любое количество. Но коды не меняются (1.8.0; 2.8.0; 3.8.1 и т.д. и т.п.)
К чему я стремлюсь - Мне нужно согласно списка указанных кодов созданного (программой|пользователем) вытащить значения из файла.
Впринципе почти получилось: загружаю файл в переменную - ищу код (вместе со значением)- вытаскиваю значение.
Для разных групп кодов использую разные шаблоны.
...
Рейтинг: 0 / 0
Регулярные выражения
    #36346943
Nevsky2006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А конкретно вопрос. Приходят в функцию по очереди две строчки
Код: plaintext
1.8.0*08(00062.749)
Код: plaintext
1.8.0*10(04449.596*kWh)
Какой доджен быть шаблон, что бы забрать только значение.
Как видно код один и тот же 1.8.0. *08 - индекс, может быть какой угодно, но только 01-99. Как бы сказать что разрядность *kWh может быть. а может и нет. (kWh - не константа)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Function SubMatchTest()'(Kod, i As Integer, Optional inpStr)
Kod="pok"
i= 0 
inpStr="1.8.0*10(04449.596*kWh)"
inpStr="1.8.0*08(00062.749)"

  If inpStr = "" Then Exit Function
  Dim oRe, oMatch, oMatches
  Set oRe = New regexp
  Select Case Kod
    Case "pok": oRe.Pattern = "(\d+\.\d+)(\*)([A-Za-z]+)"
    Case "LastIDX": oRe.Pattern = "(\*)(..)(\()"
    Case "LastDate": oRe.Pattern = "([0-9]+-[0-9]+-[0-9]+)"
  End Select
  
  Set oMatches = oRe.Execute(inpStr)
  
  Set oMatch = oMatches( 0 ) '__________________ТУТ ошибка Run-time 5 "invalid procedure call or argument"

  SubMatchTest = oMatch.SubMatches(i)
  
End Function
...
Рейтинг: 0 / 0
Регулярные выражения
    #36347235
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nevsky2006А конкретно вопрос. Приходят в функцию по очереди две строчки
Код: plaintext
1.8.0*08(00062.749)
Код: plaintext
1.8.0*10(04449.596*kWh)
Какой доджен быть шаблон, что бы забрать только значение.
Как видно код один и тот же 1.8.0. *08 - индекс, может быть какой угодно, но только 01-99. Как бы сказать что разрядность *kWh может быть. а может и нет. (kWh - не константа)Что такое "значение"? Цифра в скобках перед буквами? Тогда можно попробовать такое:
Код: plaintext
re.Pattern = "\((\d+\.\d+)\D*?\)"

Работая с регулярками в первую очередь задай себе вопрос: "что я ищу глазами в этих строках?" Чем точнее ты сможешь ответить на этот вопрос, тем больше шансов написать работающий шаблон.
...
Рейтинг: 0 / 0
Регулярные выражения
    #36347642
Nevsky2006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Круто! И откуда люди все знают!?
Спасибо White Owl , очень помогли.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Регулярные выражения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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