Как я могу удалить и преобразовать отдельные теги HTML?

StackOverflow https://stackoverflow.com/questions/272109

  •  07-07-2019
  •  | 
  •  

Вопрос

У меня есть CSV-файл в формате:

270291014011    ED HARDY - TRUE TO MY LOVE - Cap NEU 2008 NEU       0,00 €  0,00 €  0   1   0   22.10.2008 03:37:10 21.11.2008 02:37:10 21.11.2008 02:42:10 50  0   0   0   39,99 € http://i7.ebayimg.com/02/i/001/16/0d/68af_1.JPG?set_id=800005007    0   2   8.10.2008 13:40:20  8.10.2008 13:40:20  80587   0   <table bordercolordark="#999900" bordercolorlight="#666666" bgcolor="#ffffff" border="10" bordercolor="#666666" width="100%">
<tbody>
<tr>
<td><b><font color="#990000" face="arial" size="5"><br>
</font></b><blockquote>
<div align="center"><b><font color="#990000" face="arial" size="5"><font color="#ff0000">

</font></font></b><h1><font size="6"><b><font color="#990000" face="arial"><font color="#ff0000">100% ORGINAL MARKENWARE AUS DEN USA</font></font></b></font></h1>
<p style="color: rgb(0, 0, 0);"><font size="6"><b><font face="arial">ED HARDY</font></b></font></p><p style="color: rgb(0, 0, 0);"><b><font face="arial" size="5">CAP<br></font></b></p></div><div style="text-align: center;"><font size="5"><br><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial">Style: TRUE ROSE<br></font></b></font></font></b><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial"><br></font></b></font></font></b></font><font size="5"><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial">Die Kollektion von der trend Marke Ed Hardy kreiert sportlich, hipe Mode die bei den Stars in Hollywood der absolute Renner ist. In diesem super Trucker Cap fallen Sie auf !!&nbsp; </font></b></font></font></b></font><font size="5"><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial">Dieses Cap ist nagelneu mit Etikett und</font></b></font></font></b></font><font size="5"><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial"> 100% orginal.</font></b></font></font></b></font><font size="5"><br><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial"><br><br></font></b></font></font></b><br><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial">Wir tragen die ebay Kosten und der Kaeufer die Versandkosten.</font></b></font></font></b><br><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial">Versandkosten nach Europa sind folgend:</font></b></font></font></b><br><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial">fuer unversicherten Versand 6,00 Euro<br></font></b></font></font></b></font><font size="5"><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial">fuer versicherten Versand 12,00 Euro</font></b></font></font></b></font><br>
<font size="5"><span style="font-family: arial;"><span style="font-weight: bold;">Bei paypal Bezahlungen akzeptieren wir nur noch versicherten Versand!</span></span></font><br><font size="5"><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial">Auf Ihren Wunsch versenden wir die Ware auch versichert. Ansonsten trägt das Risiko beim Versand der Käufer. </font></b></font></font></b><br><b><font color="#990000" face="arial"><font color="#ff0000"><b><font color="black" face="arial">Wir bitten um Ihre Zahlung innerhalb 10 Tage nach Auktionsende.</font></b></font></font></b><br></font></div><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><b><font color="black" face="arial" size="3"><br>
</font></b></font></font></b><div align="center"><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><b><font color="black" face="arial" size="3"><font color="#ff0000">
</font></font></b></font></font></b><marquee width="70%" bgcolor="#ffffff">
<h2><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><b><font color="black" face="arial" size="3"><font color="#ff0000">Schauen Sie unbedingt bei unserem Shop "cheap-and-hip" vorbei!!!</font></font></b></font></font></b></h2></marquee><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><br><b><font color="black" face="arial" size="5"><br>
</font></b></font></font></font></b><blockquote>
<div align="center">
<center>
<h1><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><b><font color="black" face="arial" size="5">Abwicklung Ihres Einkaufs bei uns</font></b></font></font></font></b></h1><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><b><font color="black" face="arial" size="5"><br></font></b></font></font></font></b></center><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><br></font></font></font></b></div><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3">Jeder Käufer erhält innerhalb von 24 Stunden nach Auktionsende eine e-mail mit allen für die Kaufabwicklung relevanten Informationen. Sollten Sie nach 24 Stunden noch keine e-mail erhalten haben, setzen Sie sich bitte mit uns per e-mail in Verbindung. <br><br>
</font></font></font></font></b><h2><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3">Kauf von mehreren Artikeln</font></font></font></font></b></h2><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3">Da das Porto aus den USA nach Gewicht berechnet wird, werden die Versandkosten beim Einkauf von mehreren Artikeln neu berechnet. Bitte teilen Sie uns per e-mail mit, wenn Sie mehrere Artikel ersteigert/gekauft haben, bzw. noch ersteigern/kaufen moechten, Sie erhalten von uns dann die kompletten Versandkosten. Die Kosten fuer den Versand werden von dem Kaeufer getragen. Die Versanddauer betraegt bei Luftversand zirka 5-10 Tage.<br><br>
</font></font></font></font></b><h2><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3">Versand</font></font></font></font></b></h2><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3">Der Versand erfolgt innerhalb von 2-3 Werktagen nach Zahlungseingang (Gutschrift der Überweisung auf unserem Konto bei der Postbank oder bei paypal). Bitte beachten Sie, dass es je nach Kreditinstitut 2-4 Werktage dauern kann, bis Ihre Überweisung auf unserem Konto gutgeschrieben wird. Kreditkarten Gutbuchung ueber paypal erfolgt noch am gleichen Tag.<br>Als Betreff einer Ueberweisung muß unbedingt die eBay-Artikelnummer der Auktion angegeben werden. Ohne diese Information ist eine Zuordnung der Überweisung leider fast nicht möglich! <br>ZOLL: Bitte beachten Sie das Zollgebuehren anfallen koennen auch wenn es nur selten vorkommt sollten Sie sich mit den Einfuhrbestimmungen Ihres Landes vertraut machen. <br></font></font></font></font></b><br><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3"><br>
</font></font></font></font></b><h2><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3">Umtausch</font></font></font></font></b></h2><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3">Wir tauschen gerne Ihren Artikel um sofern Sie die Ware innerhalb von 14 Tagen nach erhalt den Artikel uns wieder zuschicken. Wir nehmen nur ungetragene Ware zurueck und alle Etiketten muessen noch an dem Artikel befestigt sein<br><br>
</font></font></font></font></b><h2><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3">Falls Sie Reklamationen haben</font></font></font></font></b></h2><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3">Wir bitten bei Beanstandungen der Ware sich erst mit uns in Verbindung zu setzten. Wir pruefen unsere Ware immer auf Defekte aber es kann vorkommen das uns etwas entgeht und bevor Sie eine "negative Bewertung" abgeben moechten wir die Chance bekommen Sie zufrieden zustellen. 
</font></font></font></font></b><p><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3"><b><font color="#ff0000" face="arial" size="5">
</font></b></font></font></font></font></b></p><center><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3"><b><font color="#ff0000" face="arial" size="5">Vielen Dank fuer Ihr Intresse!</font></b></font></font></font></font></b></center><p><b><font color="#990000" face="arial" size="5"><font color="#ff0000"><font color="black" face="arial" size="3"><font color="black" face="arial" size="3"><b><font color="#ff0000" face="arial" size="5"><br></font></b></font></font></font></font></b></p></blockquote></div></blockquote></td></tr></tbody></table><br><br>   1   Baltimore   1   0   1   0   0   0,10 €  0,00 €  0,00 €  0   0   1   77

Я хотел бы знать, есть ли простой способ с помощью sed или awk удалить теги HTML, кроме тегов <p>. Я также хотел бы знать, возможно ли для любой ссылки html, внедряющей Flash SWF-файл, автоматически изменять HTML-код для ссылки на этот файл.

Итак, по сути, заменить любой код, такой как

<embed src="http://backend.supremeauction.com/app/gallery/loader.swf">

с чем-то вроде <a href="http://backend.supremeauction.com/app/gallery/loader.swf">Click here for external description</a>, а затем удалите все другие теги HTML, кроме <=>

Это вообще возможно?

Это было полезно?

Решение

Вот Perl для удаления не-тэговых тегов - он не будет работать между строк, хотя

perl -pe 's/<\/?(?>[^p]|p\w+)[^>]*>//ig'

Это распечатает его в стандартный формат, и вы можете перенаправить его оттуда.

Если у вас есть только одна ссылка, вы можете сделать это:

perl -pe 's/<embed\s+src="(.*?\.swf)"\/?>/<a href="$1">Click here for external description<\/a>/i;s/<\/?(?>[^ap]|[ap]\w+)[^>]*>//ig'

Другие советы

Я придумал это для sed:

sed -e 's/[<][/][^Pp][^>]*[>]//g' -e 's/[<][^/Pp][^>]*[>]//g' file

Используйте xmlstarlet , чтобы отфильтровать нужные теги; поскольку он знает синтаксис XML (который значительно сложнее, чем может быть правильно записан в регулярном выражении), он не подвержен ошибкам в угловых случаях, таких как вложенные теги, и может правильно декодировать &amp; и kin внутри элементов. Подкоманда select будет использовать XPath, поэтому простое выражение для поиска элементов A будет делать то, что вы хотите.

Подкоманда format имеет возможность принять HTML в качестве входных данных, поэтому вы захотите выполнить начальную стадию обработки, если ваш контент не является допустимым XHTML.

Если вы хотите сделать это в Perl, существует множество служебных модулей HTML, которые могут помочь вам преобразовывать и фильтровать HTML. Другие языки, вероятно, имеют похожие библиотеки. См., Например, HTML :: Parser . Вы определяете обработчики для частей, на которые хотите повлиять. Получив контроль над этой частью, вы можете преобразовать ее и решить, как ее выводить.

Если у вас есть очень регулярный вывод, сгенерированный другой программой, вы можете избежать использования регулярных выражений. Однако всякий раз, когда я это делал, регулярное выражение начинает становиться довольно неприятным, так как я нахожу особые случаи и исключения.

Похоже, что вы можете решить эту проблему. Вы действительно пытаетесь извлечь URL-адреса и ссылки на них? Вместо того, чтобы возиться с парсерами, можете ли вы просто извлечь URL-адреса и написать совершенно новый документ, не заботясь о старом? Или, может быть, просто полностью заменить регион большим документом?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top