2010-05-28 7 views
2

J'essaie d'afficher le texte des fichiers HTML d'une manière raisonnable. Après avoir enlevé tous les balises et ne retenons que le texte visible, j'obtiens une chaîne qui ressemble à quelque chose comme ceci:Aide de Regex - nettoyage des espaces - Java

\n\n\n\n \n\n\n \n\n \n Title here \n\n\n \n\n \n\n Menu Item 1 \n\n \n\n Menu Item 2 \n\n\n \n\n you get the  point. 

Je voudrais utiliser String.replaceAll(String regex, String regex) pour remplacer une sous-chaîne des espaces contenant plus de deux occurences de \n avec "\n\n".

Des idées?

** Edit: **

Désolé pour le manque de précision. Je voudrais que les textes ci-dessus modifiée:

\n\nTitle here\n\nMenu Item 1\n\nMenu Item 2\n\nyou get the  point. 

Je veux tout qui est sous-chaîne que des espaces et contient plus de deux nouvelles lignes à remplacer par "\n\n".

Répondre

5
str.replaceAll("\\s*\n\\s*\n\\s*\n\\s*", "\n\n") 

Cela remplacera les espaces blancs-chaîne qui contient plus de 2 \n et le remplacer par \n\n.

La référence Java regex que j'utilise toujours est située here. Cela devrait vous aider à construire des expressions régulières dans le futur.

+0

Merci beaucoup. Il vous manque un backslash au milieu (devrait être '\\ s' bien sûr) mais c'est ce que je voulais. –

+0

@FarmBoy, merci pour la capture. Heureux d'avoir pu aider. – jjnguy

1

Une autre option:

str.replaceAll("(?m)\\s*$", "\n").replaceAll("\n{3,}", "\n\n"); 

Ceci est un peu moins efficace (deux) mais beaucoup remplace plus propre pour moi -Easy à comprendre et à modifier. Le premier remplacement est utile dans de nombreux cas (et pourrait être dans votre nettoyage précédent), il s'assure que chaque ligne n'a pas d'espaces de fin, et qu'il a un \n terminateur. Le second exprime clairement votre objectif.