2010-12-15 179 views
1

J'ai une chaîne Java qui ressemble à ceci, il est en fait une balise XML:besoin d'un peu d'aide sur cette expression régulière

"article-idref="527710" group="no" height="267" href="pc011018.pct" id="pc011018" idref="169419" print-rights="yes" product="wborc" rights="licensed" type="photo" width="322" " 

Maintenant, je veux supprimer l'article-idref = segment « 52770 » par en utilisant l'expression régulière, je suis venu avec le suivant:

trimedString.replaceAll("\\article-idref=.*?\"",""); 

mais il ne semble pas fonctionner, pourrait-il me donner une idée de l'endroit où je me suis mal dans mon expression régulière? J'ai besoin que ceci soit représenté comme une chaîne dans ma classe Java, donc probablement HTMLParser ne m'aidera pas beaucoup ici. Merci d'avance!

+1

Il semble que vous ayez extrait cette chaîne du fichier HTML. Pourquoi ne pas simplement utiliser votre analyseur HTML pour supprimer cet attribut particulier, au lieu de l'extraire, de le lier à nouveau et de le réintroduire? –

+0

@ Anon, il s'agit en fait d'une balise XML, et j'ai seulement besoin de l'utiliser comme une chaîne dans ma classe Java, mais pour la représentation, je dois me débarrasser de cette "article-idref" arrtibute. – Kevin

+0

@Robert, pour le massage XML, utilisez simplement un Transformer et écrivez un extrait XSLT. –

Répondre

2

Essayez ceci:

trimedString.replaceAll("article-idref=\"[^\"]*\" *",""); 
+0

Je viens de poster la même réponse mais vous étiez plus rapide. – Roman

+0

a fonctionné parfaitement, merci – Kevin

1

J'ai corrigé l'expression régulière en ajoutant des guillemets et une limite de mot (pour éviter les fausses correspondances). En outre, dans le cas où vous ne l'avez pas, souvenez-vous de réattribuer à votre chaîne après le remplacement:

trimmedString = trimmedString.replaceAll("\\barticle-idref=\".*?\"", ""); 

voir travailler à ideone.

Étant donné qu'il provient d'un document XML, il peut être préférable d'utiliser un analyseur XML pour extraire les attributs corrects au lieu d'une expression régulière. C'est parce que XML est un format de données assez complexe pour analyser correctement. L'exemple de votre question est assez simple. Cependant, une expression régulière peut se casser sur un cas plus complexe, tel qu'un document qui inclut des commentaires XML. Cela peut poser un problème si vous lisez des données provenant d'une source non fiable.

+0

génial! Un sujet hors sujet: pensez-vous que l'expression régulière est digne de passer du temps et d'étudier? Je suis un programmeur débutant spécialisé en XML et Java. – Kevin

+2

@Robert: Je pense qu'il est utile pour un professionnel de comprendre comment fonctionnent tous ses outils. Si rien d'autre, il vous aidera à choisir le bon pour la tâche. –

0

si vous êtes sûr que l'article-idref est AllWays au début, essayez ceci:

// removes everything from the beginning to the first whitespace 
trimedString = trimedString.replaceFirst("^\\s",""); 

Assurez-vous d'affecter le résultat à trimedString à nouveau, remplacer depuis ne pas midify la chaîne elle-même, mais renvoie une autre chaîne.

+0

Si c'est Unicode, ce qui étant donné que c'est XML est presque certainement vrai, alors cela ne fonctionnera pas correctement en Java. Heck, il ne fonctionnera même pas correctement pour les répertoires 8 bits, parce que les gens de Java ont rétrogradé de manière imprudente des caractères d'espaces communs comme NO-BREAK SPACE à partir de sa notion perverse de JavaWhitespace. Vous devez utiliser [ces solutions de contournement] (http://stackoverflow.com/questions/4304928/unicode-equivalents-for-w-and-b-in-java-regular-expressions/4307261#4307261) lorsque vous utilisez regexes dans Java, même sur son jeu de caractères natifs Unicode! Lame et triste, mais vrai. – tchrist