VBA - [решено] Заменить по регулярному выражению регулярное выражение

Ответить
Аватара пользователя
blackeangel

VBA - [решено] Заменить по регулярному выражению регулярное выражение

Сообщение blackeangel »

В общем надо в элементах двумерного массива удалить все что располагается между /*/. Это надо делать регуляркой, тк содержимое неизвестно и располагается в любом месте строки, а то и не раз.

Как это все сделать?
Аватара пользователя
Iska

Re: VBA - [решено] Заменить по регулярному выражению регулярное выражение

Сообщение Iska »

blackeangel, то есть, имея, например:



Код:

Код: Выделить всё

Мама/ мыла /раму. /Рабы /не мы. Мы н/е ра/бы.

в результате должны получить:



Код:

Код: Выделить всё

Мамараму. не мы. Мы нбы.

— так?



Update:[/i] может ли искомая подстрока быть пустой, т.е., такой:



Код:

Код: Выделить всё

Мама мы//ла раму.

?
Аватара пользователя
Iska

Re: VBA - [решено] Заменить по регулярному выражению регулярное выражение

Сообщение Iska »

В общем, смотрите:



Код:

Код: Выделить всё

Sub Sample()
    Dim arrStrings(5, 5) As String
    Dim i As Integer, j As Integer
    Dim objRegExp As New RegExp
    …
    …
    …
    objRegExp.Pattern = "/.*?/" ' Или "/.+?/" для непустого шаблона.
    For i = LBound(arrStrings, 1) To UBound(arrStrings, 1)
        For j = LBound(arrStrings, 2) To UBound(arrStrings, 2)
            Do While objRegExp.Test(arrStrings(i, j))
                arrStrings(i, j) = objRegExp.Replace(arrStrings(i, j), "")
            Loop
        Next j
    Next i
End Sub
Аватара пользователя
blackeangel

Re: VBA - [решено] Заменить по регулярному выражению регулярное выражение

Сообщение blackeangel »

Iska, верно мыслите. Да, может быть пустой. То есть шаблон будет где то такой

objRegExp.Paternal = "/.*/"

А вот как заменить это вопрос.



Iska, спасибо, выручили, вся беда была, что не гонял так:



Код:

Код: Выделить всё

Do While objRegExp.Test(arrStrings(i, j))

Делал через if и что то не мур мур.

Спасибо еще раз.
Аватара пользователя
Iska

Re: VBA - [решено] Заменить по регулярному выражению регулярное выражение

Сообщение Iska »

Цитата blackeangel:



То есть шаблон будет где то такой

objRegExp.Paternal = "/.*/"
VBA - [решено] Заменить по регулярному выражению регулярное выражение




Почти. Именно такой может быть, если гарантированно может быть только ноль или одно вхождение. Если может быть больше одного — такой «жадный» шаблон «сожрёт» всё от первого до последнего символа «/», посему ему нужен квантификатор «?», дабы поиск был не «жадным».
Ответить

Вернуться в «Программирование и базы данных»