Expression rationnelle n'affiche pas le signe "+" [Résolu]

Signaler
Messages postés
52
Date d'inscription
samedi 25 novembre 2006
Statut
Membre
Dernière intervention
17 décembre 2009
-
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
-
Je fais une bedetheque qui recherche des infos sur un site en particulier et j'aimerais afficher le signe plus dans une série (ex : Tintin, Astérix, Carmen+Travis). J'arrive a afficher Tintin, Astérix mais pas Carmen+Travis, ca fais Carmen Travis. Voici le code (il faut s'occuper de Value1, la Value2 n'est pas utile) :

Sub Lettre ()
Me.Cursor = Cursors.WaitCursor
Dim NomFilm As String
NomFilm = Me.TbSearch.Text

Try
Dim request As WebRequest = WebRequest.Create("http://www.bedetheque.com/bandes_dessinees_" & Lettre & ".html")
Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
Dim dataStream As Stream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream, Encoding.UTF7)
Dim responseFromServer As String = reader.ReadToEnd()
Me.RtHtmlData.Text = responseFromServer
reader.Close()
dataStream.Close()
response.Close()

Me.LvResults.Items.Clear()

Dim result As String
result = Me.RtHtmlData.Text

Dim Pattern As String
Pattern = "[ (.+?)]"

Dim Pattern1 As String
Pattern1 = "[ (.+?)]"

Dim rx As New Text.RegularExpressions.Regex(Pattern, RegexOptions.IgnoreCase)
Dim rx1 As New Text.RegularExpressions.Regex(Pattern1, RegexOptions.IgnoreCase)

Dim matches As MatchCollection = rx.Matches(result)
Dim matches1 As MatchCollection = rx1.Matches(result)

MessageBox.Show(rx.ToString)
MessageBox.Show(matches.ToString)

If matches.Count.ToString = 0 Then
MsgBox("Aucun film trouvé. Veuillez étendre votre requête.", MsgBoxStyle.Information, "Film - Ty")
Me.Cursor = Cursors.Default
Exit Sub
End If
Dim guillement As String = """"
If matches.Count.ToString = 1 Then
Dim Value1Result As String = matches.Item(0).Value.ToString
If matches1.Count.ToString = 0 Then
Value2Result = "ND"
Else
Value2Result = matches1.Item(0).Value.ToString
End If

Dim MaRegex As New System.Text.RegularExpressions.Regex("")
Dim Value1 As String
Value1 = System.Text.RegularExpressions.Regex.Replace(Value1Result, "(<[^>]+>)", "")
Value1 = Value1.Replace("&", "&")
Value1 = Value1.Replace("x9C", "?")
Value1 = Value1.Replace(""", "f")
Dim Value2 As String
Value2 = System.Text.RegularExpressions.Regex.Replace(Value2Result, "(<[^>]+>)", "")
Dim item1 As New ListViewItem(1)
item1.SubItems.Add(Value1)
item1.SubItems.Add(Value2)
Me.LvResults.Items.AddRange(New ListViewItem() {item1})
Else
For i As Short = 0 To matches.Count.ToString - 1
Dim MaRegex As New System.Text.RegularExpressions.Regex("")
Dim Value1 As String

Value1 = System.Text.RegularExpressions.Regex.Replace(matches(i).Value, "(<[^>]+>)", "")
Value1 = System.Text.RegularExpressions.Regex.Replace(Value1, "\x9C", "?")
Value1 = System.Text.RegularExpressions.Regex.Replace(Value1, "\x8C", "?")
Value1 = System.Text.RegularExpressions.Regex.Replace(Value1, "\+", "+")
Value1 = Value1.Replace(""", guillement)
Value1 = Value1.Replace("&", "&")
Dim Value2 As String
Value2 = System.Text.RegularExpressions.Regex.Replace(matches1(i).Value, "(<[^>]+>)", "")
Value2 = Value2.Replace("&", guillement)
Dim item1 As New ListViewItem(i + 1)
item1.SubItems.Add(Value1)
item1.SubItems.Add(Value2)
Me.LvResults.Items.AddRange(New ListViewItem() {item1})
Next
End If
Me.LbResults.Text = Me.LvResults.Items.Count.ToString & " résultat(s) trouvé(s)"
Me.Cursor = Cursors.Default

Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Erreur - Ty")
Me.LbResults.Text = Me.LvResults.Items.Count.ToString & " résultat(s) trouvé(s)"
Me.Cursor = Cursors.Default
End Try
End Sub

8 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Mais tu perds les accents
La vrai solution est

Car le site est en iso-8859-1

Dim respEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")

Ou mieux le prendre dans la reponse

   Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
            Dim dataStream As Stream = response.GetResponseStream()
            Dim respEncoding As Encoding = Encoding.GetEncoding(response.CharacterSet)

            Dim reader As New StreamReader(dataStream, respEncoding)
            Dim responseFromServer As String = reader.ReadToEnd()


Pense à valider si ca te plait.
Messages postés
52
Date d'inscription
samedi 25 novembre 2006
Statut
Membre
Dernière intervention
17 décembre 2009

en fait, si vous voulez, mes "+" se transforment en espaces. Y'as p'tet quelquechose à faire au niveau d'un "replace". Je sais pas du tout .
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Salut,

Cette expression semble être plus adaptée.

(?<titre>.*?)


J'ai testé avec un outil (ca bloque sur les ' mais c'est peut etre l'outil qui est buggé.


J'ai pas compris l'interet de mettre deux patterns

surtout qu'il sont identique (a +\x2B pres).

Regardes la source Tapez le texte de l'url ici.

Pour améliorer ton code et des regexp.

Bon dev
Messages postés
52
Date d'inscription
samedi 25 novembre 2006
Statut
Membre
Dernière intervention
17 décembre 2009

oui ils son identique les pattern mais je vais enlevé le 2ème ou le modifier toute façon. Le pb est pas là. Merci d'avoir répondu aussi. Mais rien n'y fais tjrs pas de solution à ce pb .
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Expliques plus ton probleme

chez moi ca fonctionne avec le code
Dim request As WebRequest = WebRequest.Create("http://www.bedetheque.com/bandes_dessinees_A.html")
Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
Dim dataStream As Stream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream, Encoding.UTF7)
Dim responseFromServer As String = reader.ReadToEnd()
Me.RtHtmlData.Text = responseFromServer
reader.Close()
dataStream.Close()
response.Close()

Me.LvResults.Items.Clear()

Dim result As String
result = Me.RtHtmlData.Text

Dim Pattern As String
Pattern = "[ .*?)"" TARGET=""_top"" alt=""(?].*?)"" title=""(?<title>.*?)"" >(?<titre>.*?)
"


Dim rx As New Regex(Pattern, RegexOptions.IgnoreCase)

Dim matches As MatchCollection = rx.Matches(result)

For Each m As Match In matches
Dim lvi As ListViewItem = New ListViewItem
lvi.Text = m.Groups("titre").Value
lvi.SubItems.Add(m.Groups("title").Value)
lvi.SubItems.Add(m.Groups("alt").Value)
lvi.SubItems.Add(m.Groups("serie").Value)
LvResults.Items.Add(lvi)
Next

MessageBox.Show(matches.Count)


Me.LbResults.Text = Me.LvResults.Items.Count.ToString & " résultat(s) trouvé(s)"
Me.Cursor = Cursors.Default


Je ne comprends pas ce que ton programme doit faire.
Messages postés
52
Date d'inscription
samedi 25 novembre 2006
Statut
Membre
Dernière intervention
17 décembre 2009

Est ce que cela affiche les BD commencant par A du site bedetheque.com comme le code ci desssus le montre ? Si oui est ce que quand vous prenez la lettre C, cela afficher la série "Carnage+" et "Carmen+Travis" plus toutes les autres séries aussi ? Pck moi aucun "+" ne s'affichent. Les séries sont affichées dans une listview. Voilà le pb...
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Tu cherches au mauvais endroit

Encoding.UTF7 --> Encoding.UTF8
Le plus n'est pas présent dans le champ texte.

Et tu as carnage+
Messages postés
52
Date d'inscription
samedi 25 novembre 2006
Statut
Membre
Dernière intervention
17 décembre 2009

Ah ui en en effet. Merci beaucoup.