Jump to content

Recommended Posts

Posted

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

Posted

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

Posted

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?

Posted (edited)

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

Edited by nelsonr

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.