2010-11-19 11 views
1

Okay, so habe ich die folgende Ausgabe:Java regex Hilfe - weißer Raum bringt mich

<p style="margin-top: 0"> 

</p> 

, die ich mit <br /> ersetzt werden soll. Ich habe den folgenden Code:

string.replaceAll("<p([^>]*)></p>","<br/>"); 

Was brauche ich, um zwischen den> und < Tags in Ordnung zu bringen nur Absatz-Tags zu ersetzen, den Leerraum haben? Das heißt, keine Zeichen oder Nummern zwischen ihnen.

Dank

+0

Sind das ASCII-Daten oder UTF-8-Daten? – tchrist

+5

Obligatorischer Verweis auf http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+0

Die Zusammenfassung dessen, was David verlinkt: Verwenden Sie nicht Regex auf HTML/XML –

Antwort

1
string.replaceAll("<p([^>]*)>\\s+?</p>","<br/>"); 

, dass die meisten Szenarien behandeln soll. Es ist eine nicht-gierige Wiederholung, bei der mindestens ein Leerzeichen erforderlich ist. Natürlich würde die Verwendung eines HTML-Parsers konsistentere Ergebnisse liefern.

+0

Dies funktioniert auch nach Bedarf und scheint ein bisschen sicherer. Vielen Dank. – Samsquanch

+0

Ich kann unmöglich sehen, was ein Minimum vs eine maximale ASCII-Whitespace-Match Ihnen kaufen wird. Auch meine HTML-Seiten sind ständig voll von '\ x85' und' \ xA0' Zeichen. Javs '\ s' Implementierung ist kaputt, weißt du? – tchrist

+0

"Sicherer"? Ich denke, ich werde mich der Cthulhu-Menge anschließen. Meine Güte! – tchrist

1

Verwenden Sie diese Methode:

string.replaceAll("<p([^>]*)>\\s*</p>", "<br/>"); 
+0

Das ist eine ziemlich naive Regex. Sie müssen [viel vorsichtiger] sein (http://stackoverflow.com/questions/4044946/regex-to-split-html-tags/4045840#4045840), um eine Chance zu haben, es richtig zu machen. – tchrist

+0

Danke. Ich probierte '\\ s', dachte aber nicht daran, das * hinzuzufügen. – Samsquanch

+0

@ user485418: Zuletzt habe ich überprüft, Java's '\ s' war nur gut für ASCII-Daten. Hoffe, dass du das hast. – tchrist