2010-07-19 4 views
0

Y a-t-il un moyen de remplacer le dernier chiffre par un trait d'union et un chiffre.regex pour remplacer le dernier chiffre par un trait d'union et un chiffre

original   needs to be replaced with 
file01    file01-01 
file02    file02-02 

Avec AmarGhosh je résolu ce problème

with names as 
(
select '/file01/some/file01' name from dual 
union all 
select '/file02/another/file02' name from dual 
) 
select name,regexp_replace(name, '^/file0([1-9]+)','/file0\1-\1') new 

NAME      NEW 
------------------------- ------------------------- 
/file01/some/file01  /file01-1/some/file01 
/file02/another/file02 /file02-2/another/file02 

Merci Merci

+1

Voir ma mise à jour. Voulez-vous qu'ils soient 'file02-02' ou' file02-2'; Et s'il y a 'file123'? – Amarghosh

+0

Il n'y a pas de fichier123 juste fichier01 et fichier02 – Lisa

+0

c'est un exemple. Qu'attendez-vous du code? Qu'en est-il de 'file12', ou' foo1234'? Vos échantillons ont à la fois '/ file02-2' et' file02-02'. Normalement, vous voulez que votre code fonctionne correctement pour autant d'entrées que possible. – Kobi

Répondre

3

Replace ^/file0([12])/ avec /file0\1-\1/

Mise à jour: pour un certain nombre de chiffres fichier suivant:

Remplacer ^/file([0-9]+)/ avec /file\1-\1/

Mise à jour 2: pour un certain nombre de /file-01

Remplacer /file([0-9]+) avec /file\1-\1

Le ^ correspond au début d'une ligne et donc votre regex ne correspond pas à la deuxième file01 - Procurez-vous débarrasser.

+0

si à partir de l'exemple, je pense que les parens devraient aussi contourner le 0: fichier (0 [12]) – bluesmoon

+0

Désolé je devais reformuler la question je veux que la deuxième rangée soit/file02/another/file02/file02 -2/another/file02 – Lisa

+0

@bluesmoon yep, mis à jour. Aussi changé '$ 1' à' \ 1' – Amarghosh

Questions connexes