[perl] Problema con regexp
Adrian Galindo
agalindo@liceaga.facmed.unam.mx
Fri, 4 Dec 1998 14:23:27 -0600 (CST)
Hola a todos, una pregunta. Tengo unas lineas de la forma:
@100@ASHEROVA-RM-1971-TEOR-MAT-FIZ-V8-P255
@100@AYALACASTANARES-A-1969-INFORME-FINAL-ESTUDI-P5
@100@AYALAMILIAN-G-1974-VARIATIONAL-METHODS-V1
@100@CARRASCO-L-1973-THESIS-U-CALIFORNIA
@100@CHAGOYADESANCHE.V-1977-BIOCHEM-BIOPH-RES-CO-V76-P804
Y necesito que queden asi:
@100@^aASHEROVA-RM^b1971^cTEOR-MAT-FIZ^dV8-P255
@100@^aAYALACASTANARES-A^b1969^cINFORME-FINAL-ESTUDI^dP5
@100@^aAYALAMILIAN-G^b1974^cVARIATIONAL-METHODS^dV1
@100@^aCARRASCO-L^b1973-THESIS-U-CALIFORNIA^c^d
@100@^aCHAGOYADESANCHE.V^b1977^cBIOCHEM-BIOPH-RES-CO^dV76-P804
Que es todo este chorizo? Bueno pues son referencias hemerograficas y en
la misma linea esta incluido el autor, el anio, el titulo y el volumen y
paginas. Necesito agregarle los ^a-d entre estos campos para hacer un
proceso posterior.
Tengo este programa (es solo un fragmento):
$linea=~s/^ (?#Ancla el principio de linea)
(.....) (?#Coincide con las arroba y el 100 =1)
(\w+ (?#Coincide con la primera palabra)
(?:-|\.) (?#Checa que siga un guion o un punto)
\w+)- (?#Checa la segunda palabra y un guion =2)
(\d+)- (?#Coincide con el anio =3)
(.*) (?#Con el titulo que puede ser de varias palabras =4)
-(\w\d+) (?#Checa la penultima palabra sin meter el guion=5)
(-\w\d+) (?#Checa la ultima palabra, puede estar o no =6)
/$1\^a$2\^b$3\^c$4\^d$5$6/x; #Junta las varibles ncontradas
print "$linea\n";
Todo esta bien cuando existe volumen (V111 al final) y paginas (P111),
pero cuando falta alguno o los dos no coincide, me regresa:
@100@^aASHEROVA-RM^b1971^cTEOR-MAT-FIZ^dV8-P255
@100@AYALACASTANARES-A-1969-INFORME-FINAL-ESTUDI-P5
@100@AYALAMILIAN-G-1974-VARIATIONAL-METHODS-V1
@100@CARRASCO-L-1973-THESIS-U-CALIFORNIA
@100@^aCHAGOYADESANCHE.V^b1977^cBIOCHEM-BIOPH-RES-CO^dV76-P804
Como ven, solo cuadro en donde estan todos (la primera y la ultima), pero
en los otros donde se omite algo ni las pela.
Intente con {0,1} despues del parentesis pero me marca un choro de
use uninitialize variable at line...
Como le pego al problema???
Sorry por el chorote, trate de ser lo mas breve.
Salu2...
---------------------------
Adrian Galindo Hdez
Hemerobiblioteca J.J.Izquierdo
Facultad de Medicina, UNAM
Ciudad de Mexico
--------- Pie de mensaje --------------------------------
Visite: http://tlali.iztacala.unam.mx/~randrade/perl.shtml
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text : cancelacion perl