Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

vastri

[Resolvido] Regex

Mensagens Recomendadas

vastri

Olá,

Estou com um problema ao utilizar o regex para sacar uma string duma pagina web

	Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(TextURL.Text)
	Dim response As System.Net.HttpWebResponse = request.GetResponse

	Dim sr As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream())
	Dim rssourcecode As String = sr.ReadToEnd

	Dim r As New System.Text.RegularExpressions.Regex("<div class=""xhref""><a href="".*""</a></div>")

	Dim matches As MatchCollection = r.Matches(rssourcecode)
	For Each itemcode As Match In matches
		ListBox1.Items.Add(itemcode.Value.Split("""").GetValue(3))
	Next

Com o uso do (.*) estou a tentar apanhar qualquer dado que lá exista, funciona perfeito se na linha só existir uma div/expressão, mas não é o caso há linhas onde a div/expressão aparece varias vezes, como estou a utilizar o (.*) todas as expressões a partir daqui são ignoradas ou melhor não apanho o href como estou a tentar fazer mas o valor da linha completa.

Já tentei outras soluções, sem sucesso...

P.f. ajuda

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Boas,

em vez do .* podes tentar indicar apenas os caracteres válidos, do tipo

<div class=""xhref""><a href=""[a-zA-Z0-9\.\/\:-]*""></a></div>

E já agora, podes adicionar um nome ao conteúdo dentro do href, para facilitar a extracção, usando o ?<nome>

Vê um exemplo aqui neste outro post

https://www.portugal-a-programar.pt/topic/62028-resolvido-procurar-valor-de-um-txt-e-apresentar-num-textbox/?do=findComment?comment=521432

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vastri

Perfeito para o href funcionou, no código exemplo cortei um pouco para ficar mais percetível, mas estou a sacar mais dados como é o caso do title e como existem carateres não validos assim já não estou a conseguir ir buscar esse valor...

O conteúdo das div's é +/- este:

<div class="title"><a href="/cross-marine-projects-commercial-Diving/ee4ebe70,companydata.html" title="Cross Marine Projects Commercial Diving">Cross Marine Projects Commercial Diving</a></div>

Como ficaria a expressão para apanhar os dois dados?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Não tenho aqui o VB.NET para testar, mas poderá ser algo assim:

Dim content as String = "<div class=""title""><a href=""/cross-marine-projects-commercial-Diving/ee4ebe70,companydata.html"" title=""Cross Marine Projects Commercial Diving"">Cross Marine Projects Commercial Diving</a></div>"
Dim pattern as String = "<div class=""title""><a href=""(?<href>([a-zA-Z0-9\.\/\:\-\,]*))"" title=""(?<title>([\w|\s])+)"
//
Dim match as Match = Regex.Match(content, pattern)

If match.Success then
Dim href as String = match.Groups("href").Value
Dim title as String = match.Groups("title").Value)
' ...
Else
' Not found
End If

Tens de fazer o Import do System.Text.RegularExpressions

Editado por nelsonr

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.