Помогите пожалуйста прописать регулярное выражение в строке 10 (там задается шаблон для поиска ) кода ниже, чтобы из XML списка артибутов ячейки можно было выудить и удалить весь блок между тегами <Worksheet > ... </Worksheet> ?
Если в строку 10 поставить шаблон для поиска просто "</Worksheet>" , то прога успешно отрабатывает и находит этот шаблон , если задать шаблон через регулярное выражение типа <Worksheet .*?<\/Worksheet> , чтобы найти весь блок , то не срабатывает...
[vba]
Код
Option Explicit
Sub RegExp() Dim myRegExp As New RegExp ' создаем экземпляр RegExp Dim aMatch As Match ' один из совпавших образцов Dim colMatches As MatchCollection ' коллекция этих образцов Dim strTest As String ' тестируемая строка Dim c As String, b As Integer, a As Integer, d As String ' устанавливаем свойства объекта RegExp myRegExp.Global = False ' если Global = True, то поиск ведётся во всей строке, _ если False, то только до первого совпадения myRegExp.IgnoreCase = True ' игнорировать регистр символов при поиске
10 myRegExp.Pattern = " <Worksheet.*?<\/Worksheet>" ' шаблон для поиска
strTest = Sheets("Прав").Range("A2").Value(11) ' присваиваем переменной XML текст из текущей ячейки Set colMatches = myRegExp.Execute(strTest) ' получаем коллекцию совпадений с образцом
'перебираем коллекцию и просматриваем результаты For Each aMatch In colMatches ' проходим по всей коллекции a = aMatch.FirstIndex ' порядковый номер первого символа найденного образца b = aMatch.Length ' кол-во символов в найденном образце c = aMatch.Value ' полный образец Next aMatch
'c = Mid(c, 6, Len(c) — 6)
Debug.Print a & " | " & b & " | " & c ' смотрим, что получилось
' производим замену найденного выражения d = myRegExp.Replace(strTest, " здесь раньше был блок Worksheet")
Debug.Print d ' смотрим, что получилось
End Sub
[/vba]
Всем добрый день.
Помогите пожалуйста прописать регулярное выражение в строке 10 (там задается шаблон для поиска ) кода ниже, чтобы из XML списка артибутов ячейки можно было выудить и удалить весь блок между тегами <Worksheet > ... </Worksheet> ?
Если в строку 10 поставить шаблон для поиска просто "</Worksheet>" , то прога успешно отрабатывает и находит этот шаблон , если задать шаблон через регулярное выражение типа <Worksheet .*?<\/Worksheet> , чтобы найти весь блок , то не срабатывает...
[vba]
Код
Option Explicit
Sub RegExp() Dim myRegExp As New RegExp ' создаем экземпляр RegExp Dim aMatch As Match ' один из совпавших образцов Dim colMatches As MatchCollection ' коллекция этих образцов Dim strTest As String ' тестируемая строка Dim c As String, b As Integer, a As Integer, d As String ' устанавливаем свойства объекта RegExp myRegExp.Global = False ' если Global = True, то поиск ведётся во всей строке, _ если False, то только до первого совпадения myRegExp.IgnoreCase = True ' игнорировать регистр символов при поиске
10 myRegExp.Pattern = " <Worksheet.*?<\/Worksheet>" ' шаблон для поиска
strTest = Sheets("Прав").Range("A2").Value(11) ' присваиваем переменной XML текст из текущей ячейки Set colMatches = myRegExp.Execute(strTest) ' получаем коллекцию совпадений с образцом
'перебираем коллекцию и просматриваем результаты For Each aMatch In colMatches ' проходим по всей коллекции a = aMatch.FirstIndex ' порядковый номер первого символа найденного образца b = aMatch.Length ' кол-во символов в найденном образце c = aMatch.Value ' полный образец Next aMatch
'c = Mid(c, 6, Len(c) — 6)
Debug.Print a & " | " & b & " | " & c ' смотрим, что получилось
' производим замену найденного выражения d = myRegExp.Replace(strTest, " здесь раньше был блок Worksheet")
Public Function GetWithoutBetweenWorksheetTags(ByVal InText As String) As String Dim pReg As Object Set pReg = CreateObject("VBScript.RegExp") pReg.Global = True: pReg.IgnoreCase = True pReg.Pattern = "(<worksheet ?>)[\S\s]*?(?=</worksheet>)" GetWithoutBetweenWorksheetTags = pReg.Replace(InText, "$1") End Function
[/vba]
Доброе время суток. Вариант [vba]
Код
Public Function GetWithoutBetweenWorksheetTags(ByVal InText As String) As String Dim pReg As Object Set pReg = CreateObject("VBScript.RegExp") pReg.Global = True: pReg.IgnoreCase = True pReg.Pattern = "(<worksheet ?>)[\S\s]*?(?=</worksheet>)" GetWithoutBetweenWorksheetTags = pReg.Replace(InText, "$1") End Function