2011-10-04 4 views
2

Donc, j'ai ces deux noms de fichier:Groupes de capture alternatifs dans regex?

SomeFile_08_20110225153831.txt.gz 
ThatOtherFile_15_20110411125902.txt_11.gz 

que je voulais faire une regex qui toujours me retourner ce jour jusqu'au jour dans le nom de fichier pour l'un des fichiers. Pensé que ce serait le tri:

^SomeFile_.*?_([0-9]{8}).*|ThatOtherFile_.*?_([0-9]{8}).*$ 

(see it in RegExr)

Actuellement, il capture que tout ce qui vient d'abord dans l'expression ...

Finalement, je vais l'utiliser dans un Oracle de remplacer tri:

REGEXP_REPLACE(
    file_name, 
    '^SomeFile_.*?_([0-9]{8}).*|ThatOtherFile_.*?_([0-9]{8}).*$', 
    '\1') 

Je l'ai dans un cas avec deux expressions séparées en ce moment et il fonctionne, mais vous savez, je souhaiterais que ce soit plus joli :)

Merci!

f.

Répondre

6
^(SomeFile|ThatOtherFile)_.*?_([0-9]{8}).*$ 

et accéder à la date avec \2, ou si Oracle prend en charge l'utilisation ?: ou équivalent pour faire le premier groupe non-capture et accéder à la date avec \1.

2

S'il vous plaît essayer regex et vérifiez si vous obtenez toujours la même question:

^(?:SomeFile|ThatOtherFile)_.*?_([0-9]{8}).*$ 
Questions connexes