2010-12-14 32 views
0

Désolé si le titre n'est pas assez descriptif. Je veux être en mesure d'extraire dans un groupe si une séquence spécifiquement formatée se produit une ou plusieurs fois.Vérification Java RegEx pour une ou plusieurs chaînes formatées

Voici mon REGEX- actuel> (double slash enlevé pour plus de clarté)

(.?): ([AZ \ d] {3} - [AZ \ d] {5} - [AZ \ d] {2}) (: [AZ \ d] {3} - [AZ \ d] {5} - [AZ \ d] {2}).

Je sais que je suis proche mais pas tout à fait là.

Ce sont donc valables

TEST1: 001-12345-67: ABC-DEFGH-IJ

retourné comme TEST1, 001-12345-67,: ABC-DEFGH-IJ (virgules groupes séparés)

QUELQUE: 123-12345-12: 987-98765-98: TSA-asdfa-AS (regex actuel ne fonctionne pas pour cela)

retourné comme QUELQUE, 123-12345-12,: 987-98765-98: TSA-asdfa-AS

Et ceux-ci ne sont pas

TEST1: 001-12345-67

QUELQUE CHOSE: 123-12345-12: HMMMM

C'est comme si je devais faire une parenthèse avec un '.' pour toute la deuxième séquence. Merci pour la contemplation de tout le monde. PS Regex me fait mal à la tête.

+0

Avez-vous essayé le plugin Regex pour IntelliJ IDEA Il est le génie –

+0

Pourriez-vous s'il vous plaît préciser le motif que vous essayez de faire correspondre. pour nous? – jjnguy

+0

Non, je ne l'ai pas, j'utilise Netbeans IDE – NickG

Répondre

0

je ferais quelque chose comme ceci:

/(.*?(?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}){2,})/ 

Et puis diviser le texte capturé sur le « : » pour obtenir les morceaux séparés.

EDIT: Attendez, vous voulez juste trois morceaux indépendamment du nombre de groupes? C'est plutôt facile. Vous pouvez l'obtenir en appelant split(':', 3) (plutôt que split(':') sur les résultats de ce qui précède, ou aller pour la solution regex:

/(.*?):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})((?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})+)/ 

(Le troisième groupe commencera par un « : » que vous ne voulez, qui peut être retiré si vous ne me dérange pas ballonnements le modèle encore plus):

/(.*?):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}(?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})*)/ 
+0

Je pensais simplement accepter quoi que ce soit après le deuxième colon, puis l'analyse séparément.La deuxième portion devrait alors être vérifiée pour la validité et si elle ne passe pas, sortez et continuez comme si elle ne correspondait pas à l'origine. – NickG

+0

@NickG: Mais vous pouvez facilement vérifier la validité dans une seule regex. –

+0

Cela semble fonctionner. Merci beaucoup. Je vais le marquer comme une réponse après quelques tests supplémentaires. Merci – NickG