получить данные с помощью Regex

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

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

самообучающийся
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 20.08.2008 (Ср) 12:13

получить данные с помощью Regex

Сообщение самообучающийся » 30.08.2008 (Сб) 3:15

может кто-нибудь подсказать как с помощью regex получить данные ?
как из этой строки
<input type=hidden name="id" value="55">

получить значение value ?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: получить данные с помощью Regex

Сообщение Nord777 » 30.08.2008 (Сб) 10:10

В простейшем случае(когда значением является целое число) так:
Код: Выделить всё
Imports System.Text.RegularExpressions

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Строка для поиска.
        Dim InputString$ = "<input type=hidden name=""id"" value=""55"">"

        'Regex-pattern
        Dim Pattern$ = "value=""(?<val>\d+)"""

        Dim M As Match = Regex.Match(InputString, Pattern)
        If M.Success Then
            MsgBox("Найденное значение: " & M.Groups("val").Value)
        End If
    End Sub


End Class


Если вокруг знака "=" могут быть пробелы, то шаблон будет таким:
"value\s*=\s*""(?<val>\d+)"""

Если регистр может быть разным, то добавь опцию:
Regex.Match(InputString, Pattern, RegexOptions.IgnoreCase)
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: получить данные с помощью Regex

Сообщение Sebas » 30.08.2008 (Сб) 10:27

я бы работал как с тегом XML. Соответственно value-атрибут
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

самообучающийся
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 20.08.2008 (Ср) 12:13

Re: получить данные с помощью Regex

Сообщение самообучающийся » 30.08.2008 (Сб) 11:40

Nord777 значение не обязательно может быть числом , может быть словом , тэгом и прочее.
Sebasисходный текст может быть не обязательно xml или html код

раньше я пользовался такой структурой:
Код: Выделить всё
    Public Function f_get_substring(ByVal AllText$, ByVal LeftText$, ByVal RightText$) As String

        Dim s1 As String
        Dim s2 As String
        s1 = InStr(1, AllText$, LeftText$, 1) + Len(LeftText$)
        s2 = InStr(s1, AllText$, RightText$, 1)
        f_get_text = Mid(AllText, s1, s2 - s1)

    End Function

и в качестве параметра передавал для вышеприведённого примера:

AllText$= "<input type=hidden name=""id"" value=""55"">"
LeftText$= "value="""
RightText$= """"

а сейчас хочу перейти на использование RegularExpressions и не могу разобраться как именно создать шаблон получить данные между "value=""" и """" или между " name=""" и """ value" и так далее

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: получить данные с помощью Regex

Сообщение Williams » 30.08.2008 (Сб) 12:30

Можно еще так:

Код: Выделить всё
"<input type=(.*?) name=""(.*?)"" value=""(.*?)"">"



Код: Выделить всё
  Dim r As Regex
        Dim m As Match = r.Match(ТвояСтрока, "<input type=(.*?) name=""(.*?)"" value=""(.*?)"">", RegexOptions.IgnoreCase)

Console.WriteLine(m.Groups(1).Value & " " & m.Groups(2).Value & " " & m.Groups(3).Value)
И вы думаете, что вас оставят в живых после прочтения этого поста?

самообучающийся
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 20.08.2008 (Ср) 12:13

Re: получить данные с помощью Regex

Сообщение самообучающийся » 30.08.2008 (Сб) 19:11

спасибо всем !

самообучающийся
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 20.08.2008 (Ср) 12:13

Re: получить данные с помощью Regex

Сообщение самообучающийся » 06.09.2008 (Сб) 23:22

ещё вопросик появился по этой теме ...
выборка данных из текста.

Код: Выделить всё
Imports System.Text.RegularExpressions
Module test

Public Sub test_text()
'в этой процедуре мне надо отобрать некоторые данные из текста
'я пытаюсь получить эти данные с помощью регулярных выражений

Dim regexp As New System.Text.RegularExpressions.Regex("<(.*?)>")' используется для удаления всех html тэгов из текста
Dim r As Regex ' для выборки кусков текста

Dim all_text As String = исходный текст       
'пытаюсь получить входящие значения для первой выборки
Dim m As Match = r.Match(all_text, "начальная позиция первой выборки (.*?) конечная позиция первой выборки", RegexOptions.IgnoreCase)
'пытаюсь получить входящие значения для второй выборки
Dim n As Match = r.Match(all_text, "начальная позиция второй выборки (.*?) конечная позиция второй выборки", RegexOptions.IgnoreCase)
InputString=(m.Groups(1).Value & " : " & n.Groups(1).Value)


' здесь удаляю все html тэги из полученного текста
str_temp = regexp.Replace(InputString, "", RegexOptions.Singleline)
End Sub

End Module

но такой вариант естественно не хочет работать ...
подскажите как это правильно сделать

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: получить данные с помощью Regex

Сообщение Joo » 15.09.2008 (Пн) 19:49

Вот так можно удалить все HTML теги из текста:
Код: Выделить всё
Dim Destantion As String
Try
   Destantion = Regex.Replace(Source, "</?[a-z][a-z0-9]*[^<>]*>", "", RegexOptions.IgnoreCase)
Catch ex As ArgumentException
   'Syntax error in the regular expression
End Try
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог


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

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

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

    TopList