2009-04-13 10 views
1

J'essaye de comprendre un problème d'expression rationnelle de Java que j'ai. C'est 1,6, mais je ne pense pas que cela compte. Quoi qu'il en soit ...Java Regex Grouping Problème

Je vais avoir des données d'entrée comme les suivantes ...

"Blah yadda yidda 44-Barack Obama, this that the other" 

ou

"Something here, there 22-Hyphenated-example. Hi there folks" 

Fondamentalement, je veux extraire tout ce qui suit le numéro jusqu'à la ponctuation de fin. Dans les deux exemples les entrées que je veux extraire ...

"Barack Obama" 

et

"Hyphenated-example" 

Je ne peux pas tout à fait obtenir le modèle que je dois utiliser. Le plus proche que je peux obtenir est ce ...

"[0-9]{1,2}-([A-Z -]*\\b*)" 

qui, cependant, me donne ...

"44-Barack Obama" 

Mon code est ...

Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); 
Matcher matcher = pattern.matcher("Blah yadda yidda 44-Barack Obama, this that the other"); 
if (matcher.find()) 
    // This gives me "44-Barack Obama" but I want "Barack Obama". 
    System.out.println(matcher.group()); 

Fait intéressant, je m en utilisant le plugin QuickREx Eclipse pour tester ce pattern et il retourne la bonne valeur. Cependant, l'exécution du code ci-dessus ne fonctionne pas.

Des idées?

Répondre

4

Utilisez le résultat de matcher.group(1), et non matcher.group(). La seconde forme renvoie tout ce qui a été apparié par la méthode précédente matches ou find. Le premier formulaire est utilisé pour accéder à des groupes de capture individuels dans la regex.

+0

Ouch !! Je suppose qu'il est important de lire le fichier * ENTIRE * Javadoc! Erickson remporte le prix. En moins d'une minute même !! – SteveT