Войти

Показать полную графическую версию : [решено] Заменить по регулярному выражению регулярное выражение


blackeangel
30-08-2017, 12:48
В общем надо в элементах двумерного массива удалить все что располагается между /*/. Это надо делать регуляркой, тк содержимое неизвестно и располагается в любом месте строки, а то и не раз.
Как это все сделать?

Iska
30-08-2017, 14:09
blackeangel, то есть, имея, например:
Мама/ мыла /раму. /Рабы /не мы. Мы н/е ра/бы.
в результате должны получить:
Мамараму. не мы. Мы нбы.
— так?

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

Iska
30-08-2017, 14:37
В общем, смотрите:
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
30-08-2017, 14:38
Iska, верно мыслите. Да, может быть пустой. То есть шаблон будет где то такой
objRegExp.Paternal = "/.*/"
А вот как заменить это вопрос.

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

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

Делал через if и что то не мур мур.
Спасибо еще раз.

Iska
30-08-2017, 14:59
То есть шаблон будет где то такой
objRegExp.Paternal = "/.*/" »
Почти. Именно такой может быть, если гарантированно может быть только ноль или одно вхождение. Если может быть больше одного — такой «жадный» шаблон «сожрёт» всё от первого до последнего символа «/», посему ему нужен квантификатор «?», дабы поиск был не «жадным».




© OSzone.net 2001-2012