2012-06-27 18 views
48

Eventuali duplicati:
Regular expression to remove HTML tagsespressione regolare per rimuovere i tag HTML da una stringa

C'è un'espressione che otterrà il valore tra due tag HTML?

Dato questo:

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

Sto cercando un'espressione che restituirà 0, spogliando i <td> tag.

+3

È la stringa, l'intera stringa e nient'altro che la stringa? In tal caso, che ne dite di '\ d +'? – Ryan

+1

Sto usando qualcosa del genere: '(?: . +? | . +? | <(?:! | /? [A-zA-Z] +). *? /?>)' e sostituendo con "" "'. –

+0

Se stai leggendo questa domanda, *** per favore *** leggi la risposta accettata per il duplicato. Le prime due risposte qui sono entrambe vulnerabili a un input molto semplice. TL; DR: le espressioni regolari non sono utili per rimuovere correttamente i tag HTML. –

risposta

31

Un approccio banale sarebbe quello di sostituire

<[^>]*> 

con niente. Ma a seconda di quanto il tuo input sia mal strutturato, potrebbe fallire.

+1

La sostituzione non è un buon approccio. Per più corrispondenze li uniresti a una stringa. –

+0

Non credo di ottenere quello che stai cercando di dire. – Joey

+0

Dato ' Primo Secondo', utilizzando un 'replaceAll' sul pattern nel tuo post risulterebbe in' FirstSecond'. –

3

si potrebbe fare con jsoup http://jsoup.org/

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

JSoup è una libreria molto interessante, ma a meno che l'OP abbia intenzione di fare molto di più della semplice sostituzione descritta nel suo post originale è probabilmente una soluzione piuttosto pesante –

96

Non si dovrebbe tentare di analizzare HTML con regex. L'HTML non è un linguaggio normale, quindi qualsiasi regex che si presenterà probabilmente fallirà in qualche caso limite esoterico. Si prega di fare riferimento alla risposta seminale a this question per specifiche. Anche se per lo più formattato come uno scherzo, è un ottimo punto.


I seguenti esempi sono Java, ma l'espressione regolare sarà simile - se non identica - per le altre lingue.


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

Assumendo che il non-html non contiene alcun < o> e che la stringa di input è correttamente strutturato.

Se sai che sono un tag specifico - ad esempio si conosce il testo contiene solo <td> tag, si potrebbe fare qualcosa di simile:

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

Edit: Ωmega portato un buon punto in un commento su un altro post che avrebbe comportato la sovrapposizione di più risultati se ci fossero più tag.

Ad esempio, se la stringa di input fosse <td>Something</td><td>Another Thing</td>, il risultato precedente sarebbe SomethingAnother Thing.

In una situazione in cui sono attesi più tag, potremmo fare qualcosa di simile:

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

Questo sostituisce il codice HTML con un singolo spazio, poi crolla spazi bianchi, e poi taglia le eventuali alle estremità.

+2

Il punto qui è di restituire la corrispondenza (es) .Se ci fossero più mathces nella stringa, li unirai a una stringa di messaggistica Esempio: '

text

qui

'. Capito? –

+0

Non dovresti minimizzarmi per i commenti. Non ti ho minimizzato, posso provarlo svalutandoti ora, se vuoi ... –

+1

L'OP ha detto: "Io sono oking per un'espressione che restituirà 0, eliminando i tag ". Il titolo del post è" espressione regolare per rimuovere tag html da una stringa ". Ho rimosso i tag ''. In nessuna parte dell'OP ha menzionato qualcosa sul pattern * matching *. –

Problemi correlati