Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1204to1208
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mit regexp text aus Html extrahieren.

Mit regexp text aus Html extrahieren.
Reinhard
Hallo Wissende,
im Inernet wimmelt es von Pattern. Aber ich bin bislang unfähig die auf meinen Wunsch umzuschreiben :-(
Es liegt Htlm vor mit vielen Einträgen dieser Art:
<a href="/app/article/show/6360846"<[Team] Kommentierfunktion Facebook
</a<<span class="grey"<(Thomas, 14.3.2011 09:18)</span>
Mich interessieren einzig die drei fettgedruckten Einträge, Rest sollte eliminiert werden.
Ob da jetzt Anführungszeichen oder Klammern drumrum sind ist mir egal.
Kann das jmd. hinkriegen?
Danke ^ Gruß
Reinhard

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Mit regexp text aus Html extrahieren.
14.03.2011 17:53:29
ransi
HAllo Reinhard
Ich versuchs mal:
Tabelle1

 A
1<a href="/app/article/show/6360846"<[Team] Kommentierfunktion Facebook</a<<span class="grey"<(Thomas, 14.3.2011 09:18)</span>
2 


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Option Explicit

Public Sub test()
    machs (Range("a1"))
End Sub


Public Function machs(zelle)
    Dim Regex As Object
    Dim objMatch As Object
    Dim objSubMatch
    Dim Ding
    Set Regex = CreateObject("VbScript.Regexp")
    With Regex
        .Pattern = "<a href=""/(.+?)""<(.+?)</a<<span class=""grey""<\((.+?)\)</span>"
        .Global = True
        Set objMatch = .Execute(zelle)
        If objMatch.Count > 0 Then
            For Each Ding In objMatch(0).SubMatches
                MsgBox Ding
            Next
        End If
    End With
End Function


ransi
Anzeige
AW: Mit regexp text aus Html extrahieren.
14.03.2011 18:29:06
Reinhard
Hallo Ransi,
leider nein, es wird die Zahl 0 angezeigt wenn ich .Count prüfe.
Mit dem nachfolgenden Code habe ich die Zwischenablage in die Variable T geschrieben und die dann an deine Funktion übergeben. Bei Msgbox T sehe ich daß T gefüllt ist.
In der Zwischenablage ist der Quellcode von hier :
http://www.wer-weiss-was.de/app/board/threads/113
Gruß
Reinhard Sub tt() 'Verweis auf Forms 2.0 setzen! Dim MyData As New DataObject, T As String MyData.GetFromClipboard T = MyData.GetText(1) MsgBox T MsgBox machs(T) MsgBox Len(machs(T)) Range("A1").Value = machs(T) End Sub Public Function machs(zelle) Dim Regex As Object Dim objMatch As Object Dim objSubMatch Dim Ding Set Regex = CreateObject("VbScript.Regexp") With Regex .Pattern = "" .Global = True Set objMatch = .Execute(zelle) MsgBox objMatch.Count If objMatch.Count > 0 Then For Each Ding In objMatch(0).SubMatches MsgBox Ding Next End If End With End Function
Anzeige
AW: Mit regexp text aus Html extrahieren.
14.03.2011 19:06:51
ransi
HAllo Rheinhard
Das ist aber ganz schön fieselig....
Teste mal:
Option Explicit

Sub tt()
    'Verweis auf Forms 2.0 setzen!
    Dim MyData As New DataObject, T As String
    MyData.GetFromClipboard
    T = MyData.GetText(1)
    MsgBox T
    MsgBox machs(T)
    MsgBox Len(machs(T))
    Range("A1").Value = machs(T)
End Sub



Public Function machs(zelle)
    Dim Regex As Object
    Dim objMatch As Object
    Dim objSubMatch
    Dim Ding
    Dim Treffer
    Dim L As Long
    Dim Z As Integer
    Set Regex = CreateObject("VbScript.Regexp")
    With Regex
        .MultiLine = False
        .Pattern = "<a href=""\/(.+?)"".+?>(.+?)<.+\n.+\((.+?)\)"
        .Global = True
        Set objMatch = .Execute(zelle)
        If objMatch.Count > 0 Then
            Redim out(1 To objMatch.Count, 1 To 100)
            For Each Treffer In objMatch
                L = L + 1
                Z = 1
                out(L, Z) = Treffer.Value
                For Each Ding In Treffer.SubMatches
                    Z = Z + 1
                    out(L, Z) = Ding
                Next
            Next
        End If
    End With
    'Ausgeben
    Range("A1").Resize(objMatch.Count, 100) = out
End Function



ransi
Anzeige
Sagenhaft
14.03.2011 20:02:58
Reinhard
Hallo Rudi,
genial dieses regexp, dummerweise kann ich es nicht schreiben :-)
Ja, scheint sehr gut zu klappen, dankeschön.
Gruß
Reinhard
ne Frage zum Verständnis
14.03.2011 20:39:16
Christian
Hallo Ransi,
was bringt das ? bei dem Pattern?
.+ heißt mindestens ein beliebiges Zeichen
.? heißt maximal ein beliebiges Zeichen (also keins oder eins)
aber was soll .+?
gruß
Christian
geklärt...
14.03.2011 20:51:08
Christian
... es könnte ja auch kein Zeichen im Bereich der gesuchten SubMatches stehen.
Da die angrenzen Zeichen hier klar definiert sind, würde ich eher .* schreiben.
Grüße
Christian
das ? und die Gier
14.03.2011 21:16:46
ransi
HAllo Christian
Sieh es mir nach wenn man das Pattern noch optimieren kann.
Ich kratze bei Regexp noch an der Oberfläche.
Das "?" soll eigentlich die Gier vom Regex bremsen.
Teste mal dieses einfache Beispiel dann weisst was ich meine.
Option Explicit


Public Sub machs()
    Dim sText As String
    sText = "abcdefg#abcdefg#a"
    Dim regex As Object
    Dim M As Object
    Set regex = CreateObject("VbScript.Regexp")
    With regex
        .Pattern = ".+?#"
        '.Pattern = ".+#"
        '.Pattern = ".*?#"
        '.Pattern = ".*#"
        .Global = True
        Set M = .Execute(sText)
        If M.Count > 0 Then
            MsgBox M(0)
        End If
    End With
End Sub



ransi
Anzeige
vielen Dank
15.03.2011 09:06:31
Christian

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige