vastri Posted August 21, 2013 at 09:25 AM Report #522236 Posted August 21, 2013 at 09:25 AM 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
nelsonr Posted August 21, 2013 at 09:36 AM Report #522237 Posted August 21, 2013 at 09:36 AM 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
vastri Posted August 21, 2013 at 10:53 AM Author Report #522245 Posted August 21, 2013 at 10:53 AM 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?
nelsonr Posted August 21, 2013 at 11:20 AM Report #522247 Posted August 21, 2013 at 11:20 AM (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 August 21, 2013 at 11:21 AM by nelsonr
vastri Posted August 21, 2013 at 11:31 AM Author Report #522249 Posted August 21, 2013 at 11:31 AM É isto mesmo nelsonr 👍 , como diz o ditado "quem sabe, sabe", fico a dever mais esta... 🙂 obrigado.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now