2013-02-12 2 views
0

Je cherche une expression régulière à une seule ligne qui correspond à un motif avec des parenthèses optionnelles. Lorsque les parenthèses sont présentes, elles ne doivent pas être incluses dans le motif correspondant.Comment regex correspond à un modèle avec des parenthèses environnantes facultatives?

Le texte en gras ci-dessous montre ce qui devrait/ne devrait pas correspondre:

doit correspondre:

"Titre Description (AAA123)"

« (ABC000) Titre Description "

" Titre De cription DEF999 "

"Titre - RST321 - Description"

ne doit pas correspondre:

"Titre Description AB123"

" Titre Description CCC456a "

"Titre Description (ABE999c)"

+0

Alors, qu'avez-vous essayé? –

+1

@Rohit Jain Au lieu de faire un bon montage. Vous l'avez foiré. –

+0

@RohitJain: J'ai essayé ceci "()? ([A-zA-Z] {3} [0-9] {3})()?" mais il correspond au caractère de fin, que ce soit une parenthèse ou non –

Répondre

3

Essayez cette regex:

\b[a-zA-Z]{3}\d{3}\b 

Cela correspond à:

# \b   - A word boundary, 
# [a-zA-Z]{3} - followed by 3 letters, 
# \d{3}  - followed by 3 digits, 
# \b   - followed by a word boundary. 

Le regex ne se soucie pas de parenthèses, comme demandé, mais doesn Ne correspond pas aux chaînes qui sont trop longues.

+1

Vous trouverez également '___ 345' et' 234456' – nhahtdh

+0

@nhahtdh: Oups, je ne pensais pas que '\ w' correspondait aussi à ceux-là. Edité, merci! – Cerbrus

+0

@Cerbrus: Excellent, le \ b était la clé manquante pour moi. Je ne savais pas comment faire correspondre un espace vide ou une parenthèse en même temps. Merci. –

Questions connexes