Regelmatige expressie om HTML-tags uit een string te verwijderen

Mogelijk duplicaat:
Regelmatige expressie om HTML-tags te verwijderen

Is er een uitdrukking die de waarde tussen twee HTML-tags krijgt?

Gezien dit:

<td class="played">0</td>

Ik ben op zoek naar een uitdrukking die 0retourneert, waarbij de <td>-tags worden verwijderd.


Antwoord 1, autoriteit 100%

Je moet niet proberen HTML te ontleden met regex. HTML is geen gewone taal, dus elke regex die je bedenkt, zal waarschijnlijk mislukken in een of ander esoterisch randgeval. Raadpleeg het baanbrekende antwoord op deze vraagvoor details. Hoewel het meestal als een grap is geformatteerd, is het een heel goed punt.


De volgende voorbeelden zijn Java, maar de regex zal vergelijkbaar zijn — zo niet identiek — voor andere talen.


String target = someString.replaceAll("<[^>]*>", "");

Ervan uitgaande dat uw niet-html geen < of > en dat uw invoerreeks correct is gestructureerd.

Als u weet dat het een specifieke tag is — u weet bijvoorbeeld dat de tekst alleen <td>-tags bevat, kunt u zoiets als dit doen:

String target = someString.replaceAll("(?i)<td[^>]*>", "");

Bewerken:
Ωmega bracht een goed punt naar voren in een opmerking op een ander bericht dat dit zou resulteren in meerdere resultaten die allemaal samen zouden worden geplet als er meerdere tags waren.

Als de invoerreeks bijvoorbeeld <td>Something</td><td>Another Thing</td>zou zijn, dan zou het bovenstaande resulteren in SomethingAnother Thing.

In een situatie waarin meerdere tags worden verwacht, kunnen we zoiets doen als:

String target = someString.replaceAll("(?i)<td[^>]*>", " ").replaceAll("\\s+", " ").trim();

Hiermee wordt de HTML vervangen door een enkele spatie, waarna de witruimte wordt samengevouwen en de uiteinden worden bijgesneden.


Antwoord 2, autoriteit 42%

Een triviale benadering zou zijn om te vervangen

<[^>]*>

met niets. Maar afhankelijk van hoe slecht gestructureerd je input is, kan dat wel eens mislukken.


Antwoord 3, autoriteit 4%

Je zou het kunnen doen met jsoup http://jsoup.org/

Whitelist whitelist = Whitelist.none();
String cleanStr = Jsoup.clean(yourText, whitelist);

Other episodes