J'utilise cette expression régulière:
((?:[a-z][a-z]+))_(\d+)_((?:[a-z][a-z]+)\d+)_(\d{13})
pour faire correspondre des chaînes comme celle-ci:
SH_6208069141055_BC000388_20110412101855
se séparant en 4 groupes:
SH
6208069141055
BC000388
20110412101855
Question: Comment puis-je rendre le premier groupe facultatif, de sorte que le groupe résultant soit une chaîne vide?
Je veux avoir 4 groupes dans chaque cas, si possible.
Chaîne d'entrée pour ce cas: (pas de soulignement après le premier groupe)
6208069141055_BC000388_20110412101855
Vous pouvez facilement simplifier votre expression régulière pour être ceci:
(?:([a-z]{2,})_)?(\d+)_([a-z]{2,}\d+)_(\d+)$
Je ne sais pas si la chaîne d'entrée sans le premier groupe aura le trait de soulignement ou non, mais vous pouvez utiliser l'expression régulière ci-dessus si c'est la chaîne entière.
Comme vous pouvez le voir, le groupe correspondant 1 dans le deuxième match est vide et commence au groupe correspondant 2.