Expression rationnelle n'affiche pas le signe "+"

Résolu
guice11 Messages postés 52 Date d'inscription samedi 25 novembre 2006 Statut Membre Dernière intervention 17 décembre 2009 - 26 juil. 2009 à 19:11
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 28 juil. 2009 à 21:02
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

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
28 juil. 2009 à 21:02
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.
3
guice11 Messages postés 52 Date d'inscription samedi 25 novembre 2006 Statut Membre Dernière intervention 17 décembre 2009
27 juil. 2009 à 11:43
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 .
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
28 juil. 2009 à 13:42
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
0
guice11 Messages postés 52 Date d'inscription samedi 25 novembre 2006 Statut Membre Dernière intervention 17 décembre 2009
28 juil. 2009 à 19:42
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 .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
28 juil. 2009 à 20:22
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.
0
guice11 Messages postés 52 Date d'inscription samedi 25 novembre 2006 Statut Membre Dernière intervention 17 décembre 2009
28 juil. 2009 à 20:40
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...
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
28 juil. 2009 à 20:52
Tu cherches au mauvais endroit

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

Et tu as carnage+
0
guice11 Messages postés 52 Date d'inscription samedi 25 novembre 2006 Statut Membre Dernière intervention 17 décembre 2009
28 juil. 2009 à 20:57
Ah ui en en effet. Merci beaucoup.
0
Rejoignez-nous