Обработка строки с помощью Regex

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Maxim-V
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 30.04.2012 (Пн) 12:45

Обработка строки с помощью Regex

Сообщение Maxim-V » 01.05.2012 (Вт) 4:43

Помогите, пожалуйста, с Regex. Вопрос вроде банален, но в виду своей неопытности никак не могу сообразить.
Например есть строка: "<p>Это <a href=''>пример</a> <b>поиска</b></p>"

Указанный ниже код в цикле выдергивает каждый тег отдельно. Как правильно написать код, чтобы результат обработки был бы в виде одной строки: "<p><a href=''></a><b></b></p>" ?

Пробовал отказаться от цикла, но тогда либо неверный код либо эксперименты с Regex.Replace (к-ые также ни к чему хорошему не приводят, т.к. регулярка сильно усложняется).

Код: Выделить всё
        Dim regexp As New Regex("<(.*?)>")
        Dim html As String
        Dim i As Integer
        Dim m As MatchCollection

        html = "<p>Это <a href='http://vbnet.ru'>пример</a> <b>поиска</b></p>"
        m = regexp.Matches(html)
        For i = 0 To m.Count - 1
            MsgBox(m.Item(i).Value)
        Next

Mleha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 146
Зарегистрирован: 06.10.2004 (Ср) 7:49
Откуда: Ангарск

Re: Обработка строки с помощью Regex

Сообщение Mleha » 01.05.2012 (Вт) 9:55

Собирай в цикле во временную переменную, и пользуйся результатом в конце
Код: Выделить всё
    Dim inputString As String = "<p>Это <a href=''>пример</a> <b>поиска</b></p>"
    Dim pattern As String = "<[^>]+>"
    Dim matchCollection As System.Text.RegularExpressions.MatchCollection = System.Text.RegularExpressions.Regex.Matches(inputString, pattern)
    Dim tmp As String = ""
    For Each capt As System.Text.RegularExpressions.Capture In matchCollection
      tmp &= capt.Value
    Next
    MessageBox.Show(tmp)

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 01.05.2012 (Вт) 11:50

Надо что, оставить все теги удалив текст? Это для чего? :shock:

Конкатенацию лучше через StringBuilder делать. Или вообще так (примерно):
Код: Выделить всё
Dim Res As String = String.Join("", (From M As Match In Regex.Matches(InputString, "<.*?>") Select M.Value).ToArray())

Maxim-V
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 30.04.2012 (Пн) 12:45

Re: Обработка строки с помощью Regex

Сообщение Maxim-V » 01.05.2012 (Вт) 13:14

Текст с тегами это просто пример. Обычно задача стоит наоборот: удалить теги, оставив текст.
Главное, хотел для себя понять, как результат в одну строку выводить.

За примеры большое спасибо.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 01.05.2012 (Вт) 21:13

Maxim-V писал(а):Обычно задача стоит наоборот: удалить теги, оставив текст.

Код: Выделить всё
Result = Regex.Replace(Input, "<.*?>", "")


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39

    TopList