Regex, um bedingte Kommentare zu entfernen

Ich möchte eine Regex, die bedingte Kommentare in einer HTML-Quellseite entsprechen kann, so dass ich nur die entfernen kann. Ich möchte die regelmäßigen Kommentare bewahren.

Ich würde auch gerne mit dem. Notation wenn möglich

Der Text ist

foo <!--[if IE]> <style type="text/css"> ul.menu ul li{ font-size: 10px; font-weight:normal; padding-top:0px; } </style> <![endif]--> bar 

Und ich möchte alles in <!--[if IE]> und <![endif]--> entfernen

EDIT: Es ist wegen der BeautifulSoup Ich möchte diese Tags entfernen. BeautifulSoup kann nicht analysieren und gibt eine unvollständige Quelle

EDIT2: [wenn IE] ist nicht die einzige Bedingung. Es gibt noch viel mehr und ich habe keine Liste aller möglichen Kombinationen.

EDIT3: Die Lösung von Vinko Vrsalovic funktioniert, aber das eigentliche Problem, warum die Schauspiele gescheitert sind, war wegen eines Schurkenkommentars innerhalb des bedingten Kommentars. Mögen

 <!--[if lt IE 7.]> <script defer type="text/javascript" src="pngfix_253168.js"></script><!--png fix for IE--> <![endif]--> 

Beachten Sie die <!--png fix for IE--> Kommentar?

Obwohl mein Problem gelöst war, würde ich gerne eine Regex-Lösung dafür bekommen.

One Solution collect form web for “Regex, um bedingte Kommentare zu entfernen”

 >>> from BeautifulSoup import BeautifulSoup, Comment >>> html = '<html><!--[if IE]> bloo blee<![endif]--></html>' >>> soup = BeautifulSoup(html) >>> comments = soup.findAll(text=lambda text:isinstance(text, Comment) and text.find('if') != -1) #This is one line, of course >>> [comment.extract() for comment in comments] [u'[if IE]> bloo blee<![endif]'] >>> print soup.prettify() <html> </html> >>> 

Python 3 mit bf4:

 from bs4 import BeautifulSoup, Comment html = '<html><!--[if IE]> bloo blee<![endif]--></html>' soup = BeautifulSoup(html, "html.parser") comments = soup.findAll(text=lambda text:isinstance(text, Comment) and text.find('if') != -1) #This is one line, of course [comment.extract() for comment in comments] [u'[if IE]> bloo blee<![endif]'] print (soup.prettify()) 

Wenn deine Daten BeautifulSoup verwirrt werden, kannst du es vor der Hand reparieren oder den Parser anpassen , unter anderem.

EDIT: Per dein Kommentar, du modifizierst einfach das Lambda, das an FindAll geschickt wird, wie du brauchst (ich habe es geändert)

  • Regex-Ausdruck, um 5-stelligen Code zu finden
  • Analysiere ein whatsApp-Konversationslog
  • Machen Sie Regex Match dotfiles genau
  • Python Regex Partial Match oder "hitEnd"
  • Ersetzen Sie das erste Vorkommen des Strings
  • Wie lerne ich durch alle Knoten eines Baumes?
  • Pandas finden Strings gemeinsam unter Serie und Rückkehr Schlüsselwörter
  • Saubere Python Reguläre Ausdrücke
  • Python Math Regex
  • Bedingter Regex-Ersatz
  • Was ist der Unterschied zwischen Pythons re.search und re.match?
  • Python ist die beste Programmiersprache der Welt.