2009-11-26 6 views
1

J'ai un document stocké en tant que grand String. Dans la chaîne j'ai quelques balises XML en ligne et je veux sortir les mots entre les balises. Les documents peuvent également contenir des balises HTML, car les documents sont souvent des sites Web.Java: Problème RegEx (en utilisant le symbole '.' All character)

Exemple de document:

"< tr> Mon nom est < b> < PERSONNE> Bobby </PERSONNE> </b>, je vis aux Etats-Unis."

RegEx actuel:

Pattern p = Pattern.compile("<(LOCATION|PERSON|ORGANIZATION)>[\\w[ '\"/\\!%$\\(\\)\\-\\+]]*</(LOCATION|PERSON|ORGANIZATION)>"); 

Matcher m = p.matcher("I'm <PERSON>Graham Brown</PERSON> I went to the <LOCATION>USA'S</LOCATION>"); 

while(m.find()){ 
    System.out.println(m.group()); 
} 

Résultat = < PERSONNE> Bobby </PERSONNE> < LIEU> États-Unis </Location>

Cela fonctionne très bien avec à peu près le plus ponctuation et grammer, mais le Regex devrait permettre à n'importe quel modèle de caractère d'être trouvé entre les étiquettes. Quand j'essaie d'utiliser '.' (n'importe quel caractère), comme ci-dessous il retourne la chaîne entière.

"< tr> Mon nom est < b> < PERSONNE> Bobby </PERSONNE> </b>, je vis aux Etats-Unis."

Pattern p = Pattern.compile("<(LOCATION|PERSON|ORGANIZATION)>.</(LOCATION|PERSON|ORGANIZATION)>"); 

Comment puis-je retourner tous les caractères entre les balises openinng angulaires et de fermeture?

EDIT: Merci pour vos réponses. Juste et pour aider à obtenir la bonne réponse. Pour clarifier, j'ai marqué Entités nommées en utilisant NER. Si vous n'êtes pas au courant de ce que c'est, veuillez consulter certains des documents que j'ai mentionnés en bas.

Tout ce qui m'intéresse c'est d'obtenir le texte entre les trois balises d'ouverture et de fermeture. Il n'y a pas d'autres balises et les documents ne sont pas des fichiers XML et je ne suis pas en train d'analyser toutes les balises HTML et je ne m'intéresse pas à elles. Tout ce qui m'intéresse est d'analyser les balises XML que j'ai créées, donc je pense que RegEx serait le moyen le plus simple de le faire.

documents à ajouter plus tard ...

+0

dieu Cher, pourquoi n'êtes-vous pas en utilisant une sorte d'analyseur XML? Cette regex est pure * evil *. – abyx

+0

analyse HTML avec regex? c'est une mauvaise idée –

+2

Vous avez sûrement vu ça: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – vahidg

Répondre

4

Mettez un point d'interrogation .*? pour les processus non gourmands. PS: Je corrige juste votre regex, mais cela ne signifie pas que c'est la solution. L'utilisation de parseurs est toujours une meilleure idée.

+0

Merci pour votre aide avec le RegEx ce n'est pas quelque chose que je fais souvent et je ne plonge pas vraiment à travers beaucoup de balises XML. J'avais juste besoin d'extraire du texte entre 3 balises différentes et par RegEx serait un moyen rapide de le faire car je n'ai pas beaucoup utilisé les analyseurs en Java. – binarycreations

-1

Veuillez utiliser un XML parser pour extraits XML. C'est le outil droit pour votre problème.

Éditer: Et utiliser un désinfectant HTML pour pré-traiter le fichier HTML. En outre, définissez un schéma XML strict pour le XML afin d'assurer la structure XML.

+2

Vous pensez qu'un analyseur XML est la bonne solution pour analyser quelques balises XML éparses à partir de documents qui peuvent contenir du texte brut ou html? Je pense que dans ce cas, il s'agit de balises XML comme une simple forme de méta-données et non comme une véritable structure arborescente. Pour analyser les balises de méta-données à partir d'autres documents, regexp pourrait être la bonne solution. – Benj

+0

Je voudrais seulement analyser les ** extraits ** XML avec l'analyseur XML (voir ma réponse). –

+0

Je n'ai pas besoin de nettoyer les fichiers HTML pour NER, voir Modifier et Commentaires. Benj a eu la bonne idée. – binarycreations

-1

Il n'y a qu'une seule réponse à ce problème: You can't parse HTML with regex

+0

Je ne suis pas en train d'analyser HTML avec regex, voir Modifier et Commentaires. – binarycreations

+0

NER est XML et l'article de références est également vrai pour XHTML et donc vrai pour XML. Mais bonne chance avec vous RegExp de toute façon. J'espère que personne d'autre n'aura jamais besoin de maintenir cette bête. (http://www.jdom.org/) –

+0

+1 Maintenance logicielle qu'est-ce que c'est? –