Python-regex: entfernen Sie bestimmte HTML-tags und der Inhalt in Ihnen

Wenn ich eine Zeichenfolge, die enthält:

<p><span class=love><p>miracle</p>...</span></p><br>love</br>

Und ich möchten, entfernen Sie die Zeichenfolge:

<span class=love><p>miracle</p>...</span>

und vielleicht einige andere HTML-tags. Zur gleichen Zeit, mit anderen tags und der Inhalt in Ihnen reserviert wird.

Das Ergebnis sollte wie folgt sein:

<p></p><br>love</br>

Ich möchte wissen, wie dies zu tun ist mithilfe von regex-pattern?
was ich versucht habe :

r=re.compile(r'<span class=love>.*?(?=</span>)')
r.sub('',s)

aber es wird verlassen die

</span>

können Sie mir helfen mit re-Modul in dieser Zeit?und ich werde lernen, html-parser nächste

  • and maybe some other HTML tags.. - Wenn Sie entfernen wollen viele verschiedene Dinge, die Sie in Aussehen sollte das Parsen der HTML-eher als die Verwendung von Regex.
  • es gibt keine Weise können Sie tun dies in regex...usean html-parser
  • falsch, als poke ' s Antwort gezeigt, eine regex auswählen können, zwei Streichern und allem, was dazwischen liegt
  • Völlig falsch, betonte der von Chris Stratton. Die Menschen sind so besessen von der katechetischen Behauptung, dass 'regexes können nicht Parsen von HTML-Dokumenten', die Sie schreiben, zu löschen, sobald Sie sehen, ein bisschen regex auf einen HTML-text.
  • 1>die regex in der Antwort wird nicht funktionieren, wenn es verschachtelte span-tags..2>viele Male ein span-tag nicht über ein End-tag, daher das brechen des Codes..es gibt n keine der anderen Fälle für die regex fehlschlagen..wenn du willst kann ich Liste von 10 anderen Fällen, wo die regex brechen würde
  • mit den 2 oben genannten Gründen hier sind andere Fälle, in denen die regex brechen würde: 3>der name einer Klasse können innerhalb ",'.die regex unten nicht für Sie arbeiten.. 4>ein span-tag können auch andere Attribute, auf die die regex nicht Adresse 5>ein span-tag haben kann, n die Anzahl der Leerzeichen zwischen den Parametern, auf die die regex nicht
  • ein regex kann nicht in der Lage, alles zu behandeln, die als eigentliche HTML-parser, aber im Gegensatz zu Ihrer ursprünglichen Forderung kann es "tun" wo "das" ist das problem der Frage.
  • es sei denn, du wer erstellt die html -, es gibt keine Möglichkeit, Sie könnte folgern, die Grammatik von html durch regex
  • Vielen Dank für Ihren Kommentar. Sie scheinen zu wissen, HTML-weit besser als ich. Ich kenne alle diese Kritiker gegen regexes auf HTML. Ich habe nicht gemeint, dass diese Nachteile nicht bestehen, ich meinte damit, dass Sie sagen, dass ein regex könnte nicht tun, was die OP gefragt, ist falsch in dem präzisen Fall des OP ' s string. Als Sie äußerte, er könnte denken, dass es absolut unmöglich ist, zu analysieren einen text, sobald es tags, und das ist völlig falsch. - Das heißt, Sie haben Recht, dass kann er nichts von den Gefahren, wie z.B. eine Analyse, ob die Zeichenfolge passiert zu sein, eine komplexere HTML-text.
  • Ich hatte nicht gesehen, dass der Letzte Kommentar von Chris vor dem posting meine. Er sagt genau das gleiche wie ich
  • Infering die Grammatik oder das extrahieren der Baum eines HTML-text, was nicht richtet sich an von der OP: das ist die Analyse in reinem Sinn (soweit ich das richtig verstanden, den reinen Sinn der Analyse in der Programmierung) des Wortes 'parse'. Ich bin damit einverstanden, dass regexes kann nicht extrahieren, der Baum des tagged-text - (HTML, XML etc.), können Sie nicht analysieren Sie. Aber Sie können zu analysieren.
  • Durch die Art und Weise, da Sie gut wissen, HTML, könnten Sie mir sagen, ob es können geschachtelt werden <span...>.....</span> innen schon verschachtelte span-tags , bitte. Das heißt, ist die Verschachtelung von <span> - tags auf eine Ebene beschränkt, oder kann das Niveau der Verschachtelung span-tags alles sein ? Für die folgenden Muster Fänge <span class=love>....</span>, was zwischen den tag starten und den tag zu beenden, wenn und nur wenn es gibt nur eine Ebene von <span> tags drin: '<span class=love>(?:.*?(?=<span[^>]*>)(?:<span[^>]*>.*?</span>)?)*.*?</span>'. Dies ist die Antwort für deinen Punkt 1/
  • verschachtelte span-tags sind gültig, auch in xhtml..vergessen html
  • mit n Anzahl der level
  • OK, ich danke Ihnen sehr. So ist es der Verantwortung des OP, zu wissen, was er tut: entweder er verwendet eine regex, die das tun, die begrenzte Aufgabe, die er will, denn er weiß, oder er geht das Risiko ein, dass das HTML keine verschachtelte span-tags; entweder ist er verpflichtet, eine angepasste parser zu führen Substitutionen, die auf komplizierteren HTML-text.
  • das, was Sie debattiert haben, ist sehr bedeutungsvoll für mich.Ich kenne die Gebundenheit des reinen regex als die Frage mentiond,aber es tun kann, lösen mein problem in dieser besonderen situation. Für andere kann es brauchen, das HtmlParser-Modul.Danke für die Idee
  • Die diskutieren das Sie geben, ist wunderbar.Letzte Nacht Las ich das python-Buch,es zu erwähnen, dass das htmlparser-Modul nicht-Identifikation alle html-tags,ist das die Wahrheit? Wenn dem so ist,das Reine können helfen, mit diesen tags.

InformationsquelleAutor mjc | 2013-07-05
Schreibe einen Kommentar