Mit anderen Worten, kann man /<tag[^>]*>.*?<\/tag>/
regex verwenden, um das tag
html Element zu finden, das keine verschachtelten tag
Elemente enthält?
Zum Beispiel (lt.html):
%Vor%Regex:
%Vor%Und Bildschirm-Schaber:
%Vor%Beide geben die gleiche Ausgabe:
%Vor%Erwartete Ausgabe:
%Vor%w3c sagt:
Attributwerte sind eine Mischung aus Text und Zeichenreferenzen, außer mit die zusätzliche Einschränkung, dass die Text kann keine mehrdeutigen enthalten kaufmännisches Und.
Ja, es ist erlaubt (W3C Validator akzeptiert es, gibt nur eine Warnung aus).
Unescaped <
und >
sind auch innerhalb von Kommentaren erlaubt, also kann so einfach regexp getäuscht werden.
Wenn BeautifulSoup dies nicht handhabt, könnte es sich um einen Fehler oder eine bewusste Designentscheidung handeln, um die fehlenden Anführungszeichen in Attributen widerstandsfähiger zu machen.
Ich glaube, das ist gültig, und der W3C-Validierer stimmt zu, aber die maßgebliche Quelle für diese Information ist der Standard ISO 8879: 1986, der ~ 150EUR / 210USD kostet. Trotzdem ist es nicht falsch, sie zu kodieren, also im Zweifelsfall kodieren. Wenn Sie einen XML-basierten Dokumenttyp verwenden, müssen Sie außerdem Größer-als-Zeichen in der Sequenz ]]>
codieren.
Wenn Sie darauf bestehen, reguläre Ausdrücke zu verwenden (was für grundlegende String-Operationen geeignet ist), versuchen Sie es mit <tag((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)>.*?<\/tag>
. Es sollte die Attribute perfekt anpassen und Ihnen somit den Zugriff auf den inneren Inhalt ermöglichen (obwohl Sie ihn in eine Erfassungsgruppe einfügen müssen).
Sie können auch die Html Agility Pack zum Analysieren von HTML verwenden, die ich würde empfehlen, wenn Sie viel Parsing tun werden. Das Aufrechterhalten großer regulärer Ausdrücke kann leicht zu Kopfschmerzen werden, aber in der Zwischenzeit sind sie auch viel effektiver, wenn Sie dazu in der Lage sind.
Passt nicht zu einem einzelnen Tag, sondern passt das erste Start-Tag und das letzte End-Tag für ein bestimmtes Tag an. Genau wie dein erstes nicht gieriges Tag-Match, sollte dein In-Between auch nicht-gierig geschrieben werden.
sehen Sie, ob Sie das gleiche Ergebnis mit & amp; gt; anstelle von & gt;