Страницы: 1
RSS
Поиск и использование символа скобки в regexp, При попытке найти с помощью regexp символа скобки выдает ошибку или #ЗНАЧ
 
Доброго.
Использую макрос по RegExpExtract, найденный на просторах данного сайта.
При любой попытке найти открывающую "(" или закрывающую ")" скобку формула выдает либо ошибку, потому что скобка не закрыта, либо #ЗНАЧ.
Какой синтаксис использования "(" и ")" как символов в поиске через RegExpExtract?
Вот что я уже пробовал:
=RegExpExtract(RC[-3];"(\d{1,3}";1)
=RegExpExtract(RC[-3];"~(\d{1,3}";1)
=RegExpExtract(RC[-3];"\(\d{1,3}";1)
=RegExpExtract(RC[-3];""("\d{1,3}";1)

Ищу текст "(1" в строке ВАНТУЗ ПЛАСТМАСС. РУЧКА (1/100) "ВИРПЛАСТ"
 
Пока копался, нашел одно решение:
=RegExpExtract(RC[-3];"[(]\d{1,3}";1)


Скобку ищет, но как всё-таки искать скобку просто как единичный символ?
 
А поиск как всегда не дает результатов? :) Уверен, Яндекс помог бы, если бы попробовали искать. Например, если набрать "указать скобку в RegExp" можно как минимум найти, что скобка является спец.символом, означающий границы выражения. Это значит, что надо как-то дать понять RegExp, что скобку не надо воспринимать как что-то специальное. Чтобы искать именно скобку(или любой другой спец.символ) надо просто её экранировать левым слешем:
Код
"\(\d{1,3}"
P.S. Раз занялись регулярками, не поленитесь, найдите и почитайте книгу "Бен Форта - Регулярные выражения. 10 минут на урок". Кратко и по делу. Общее понимание(а даже больше) работы с регулярками будет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, посмотрите на текст выше. Я уже пробовал экранировать скобку и результат оказался тем же.
Я пользуюсь регулярками в Adobe Indesign, там всё отлично экранируется и проблем с формулами не возникает.
Это не проблема RegExp, это проблема странностей Excel или VBA, точно не знаю чего.


Проблемы возникают и в применении "жадности" к паттернам.  Просто . (паттерн любого символа) работает, а паттерн + квантор  .+ или .*  выдают ошибку.
Этого не происходит в языках программирования и в том же Indesign при поиске с помощью GREP.


Более того проблема с кванторами возникает исключительно при обращении ко второму и следующим вхождениям в выражениях.
Изменено: kdbled - 19.07.2018 15:13:53
 
Цитата
kdbled написал:
Я уже пробовал экранировать скобку
приложите уже файл с чудесной функцией. Тогда будет о чем говорить. Пока что это все лишь на словах. У меня обратный слеш все экранирует как положено.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
приложите уже файл с чудесной функцией.
Код
Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String
     On Error GoTo ErrHandl
     Set regex = CreateObject("VBScript.RegExp")
     regex.Pattern = Pattern
     regex.Global = True
     If regex.Test(Text) Then
         Set matches = regex.Execute(Text)
         RegExpExtract = matches.Item(Item - 1)
         Exit Function
     End If
 ErrHandl:
     RegExpExtract = CVErr(xlErrValue)
 End Function
Взято отсюда: https://www.planetaexcel.ru/techniques/7/4844/
Изменено: kdbled - 19.07.2018 15:34:17
 
Проверил - выдает текст "(1".  Excel 2007, Win XP и Excel 2016,Win 10
Код
Sub test()
  Debug.Print RegExpExtract("ВАНТУЗ ПЛАСТМАСС. РУЧКА (1/100) ""ВИРПЛАСТ""", "\(\d{1,3}")
End Sub
Изменено: sokol92 - 19.07.2018 16:21:08
Владимир
 
У меня тоже без паталогий, выдало нужный текст - (1.
Записываю так:
=RegExpExtract(RC[-3];"\(\d{1,3}";1)

Текст: ВАНТУЗ ПЛАСТМАСС. РУЧКА (1/100) "ВИРПЛАСТ

Правда, Николай, как всегда не использует объявление переменных, но проблема явно не в этом. Приложите файл - возможно дело в самом тексте.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Запустил excel повторно, поставил скрипт еще раз и всё заработало.
Скобка экранируется и находится без проблем.
Есть подозрения, что это кривые руки автора топика, то есть мои.
К этому времени я уже нашел обходные пути решения всего, что не смог сделать из-за ошибок, но книжечку посоветованную почитаю.


Спасибо, что помогли. И извиняюсь.
Страницы: 1
Наверх