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

Вход

Регистрация

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

 

= Мир MS Excel/Поиск в строке. Регулярные выражения - Мир MS Excel

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

Excel 2007
Доброго времени суток.
Подскажите, как с помощью регулярных выражений вывести из строки содержимое скобок через точку с запятой.
Примеры:
(223) выведет 223;
(344)/(563) выведет 344;563;
((42) + 2* ((42)+(43)) / (121) выведет 42;43;121;
Т.е. в строке могут встречаться любые символы, но то, что в скобках, обязательно целые числа
Подскажите, хотя бы, с чего начать.
Спасибо!
 
Ответить
СообщениеДоброго времени суток.
Подскажите, как с помощью регулярных выражений вывести из строки содержимое скобок через точку с запятой.
Примеры:
(223) выведет 223;
(344)/(563) выведет 344;563;
((42) + 2* ((42)+(43)) / (121) выведет 42;43;121;
Т.е. в строке могут встречаться любые символы, но то, что в скобках, обязательно целые числа
Подскажите, хотя бы, с чего начать.
Спасибо!

Автор - C_sanches
Дата добавления - 08.06.2015 в 14:47
ikki Дата: Понедельник, 08.06.2015, 15:31 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
а почему для третьей строки 42 - в результате один раз?
[vba]
Код
Function f$(s$)
     Set r = CreateObject("vbscript.regexp")
     r.Pattern = "\((\d+)\)": r.Global = True
     Set m = r.Execute(s)
     For Each e In m: f = f & ";" & e.submatches(0): Next
     f = Mid(f, 2)
End Function
[/vba]

для уникальных
[vba]
Код
Function g$(s$)
     Set r = CreateObject("vbscript.regexp")
     Set d = CreateObject("scripting.dictionary")
     r.Pattern = "\((\d+)\)": r.Global = True
     Set m = r.Execute(s)
     For Each e In m: d(e.submatches(0)) = 0&: Next
     g = Join(d.keys, ";")
End Function
[/vba]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеа почему для третьей строки 42 - в результате один раз?
[vba]
Код
Function f$(s$)
     Set r = CreateObject("vbscript.regexp")
     r.Pattern = "\((\d+)\)": r.Global = True
     Set m = r.Execute(s)
     For Each e In m: f = f & ";" & e.submatches(0): Next
     f = Mid(f, 2)
End Function
[/vba]

для уникальных
[vba]
Код
Function g$(s$)
     Set r = CreateObject("vbscript.regexp")
     Set d = CreateObject("scripting.dictionary")
     r.Pattern = "\((\d+)\)": r.Global = True
     Set m = r.Execute(s)
     For Each e In m: d(e.submatches(0)) = 0&: Next
     g = Join(d.keys, ";")
End Function
[/vba]

Автор - ikki
Дата добавления - 08.06.2015 в 15:31
C_sanches Дата: Понедельник, 08.06.2015, 15:59 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
спасибо огромное, именно то, что нужно. Я почти был близок к этому =)
а можно пояснить, как во втором случае выбираются уникальные? За это отвечает объект scripting.dictionary?
 
Ответить
Сообщениеспасибо огромное, именно то, что нужно. Я почти был близок к этому =)
а можно пояснить, как во втором случае выбираются уникальные? За это отвечает объект scripting.dictionary?

Автор - C_sanches
Дата добавления - 08.06.2015 в 15:59
ikki Дата: Понедельник, 08.06.2015, 16:30 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
да


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеда

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

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