Article View: es.comp.os.linux.programacion
Article #5921Re: Regexp & Perl: Como sustituir varias palabras parecidas
From: Samuel
Date: Tue, 02 Sep 2003 06:44
Date: Tue, 02 Sep 2003 06:44
97 lines
3876 bytes
3876 bytes
El 1 Sep 2003 15:31:14 -0700, Francesco Moi <francescomoi@europe.com> dijo: > Hola. > > En Perl, tengo una cadena con un texto, en la que me gustar�a sustituir > las palabras 'programacion', 'programa' o 'programador' por 'program'. > > Con esta RegExp funciona: > $texto =~ s/programador|programa|programacion/program/g; > > Pero como son palabras muy parecidas, pensaba que se podr�a hacer > mucho m�s facil, como por ejemplo: > $texto =~ s/program[ador,a,cion]/program/g; > $texto =~ s/program[ador|a|cion]/program/g; > > Pero ninguna de las dos funciona. �Alguien sabe como hacer m�s corta > la RegExp, si es que se puede? > > Gracias, y un saludo. Creo que no has entendido como funciona el []. Pero tu mismo te puedes dar cuenta depurando la expresi�n regular. Veamos: 1) Primer caso (Bueno) $ perl -e 'use re 'debug'; \ $texto =~ s/programador|programa|programacion/program/g;' Compiling REx `programador|programa|programacion' size 15 1: BRANCH(6) 2: EXACT <programador>(15) 6: BRANCH(10) 7: EXACT <programa>(15) 10: BRANCH(15) 11: EXACT <programacion>(15) 15: END(0) minlen 8 2) Segundo caso $ perl -e 'use re 'debug'; $texto =~ s/program[ador,a,cion]/program/g;' Compiling REx `program[ador,a,cion]' size 13 first at 1 1: EXACT <program>(4) 4: ANYOF[,acdinor](13) 13: END(0) Esto no es lo que quieres 3) Tercer caso $ perl -e 'use re 'debug'; $texto =~ s/program[ador|a|cion]/program/g;' Compiling REx `program[ador|a|cion]' size 13 first at 1 1: EXACT <program>(4) 4: ANYOF[acdinor|](13) 13: END(0) Esto tampoco. Como ves [] simplemente define una clase de *caracteres*, igual que lo es \w o \d. Eso no te vale. Lo que necesitas es: $ perl -e 'use re 'debug'; $texto =~ s/program(ador|a|acion)/program/g;' Compiling REx `program(ador|a|acion)' size 18 first at 1 1: EXACT <program>(4) 4: OPEN1(6) 6: BRANCH(9) 7: EXACT <ador>(16) 9: BRANCH(12) 10: EXACT <a>(16) 12: BRANCH(16) 13: EXACT <acion>(16) 16: CLOSE1(18) 18: END(0) O si quieres coger tambi�n programadores, programatico, etc...: $ perl -e 'use re 'debug'; $texto =~ s/program[a-zA-Z]*?/program/g;' Compiling REx `program[a-zA-Z]*?' size 15 first at 1 1: EXACT <program>(4) 4: MINMOD(5) 5: STAR(15) 6: ANYOF[A-Za-z](0) 15: END(0) Puedes echarle un vistazo tambi�n, por si tienes dudas a las p�ginas man perlre y perlretut. Saludos Samuel -- Samuel Mo�ux Salvador PGP Key pgp.rediris.es ----- KeyID 0x822583C2
Technical Details
Message-ID:
<slrnbl8f1v.ks.444398NOSPAM@tizona.no-ip.org>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!cyclone.bc.net!tdsnet-transit!newspeer.tds.net!news-out1.nntp.be!propagator2-sterling!news-in-sterling.nuthinbutnews.com!nsnmrro1-lo.nuria.telefonica-data.net!nsnmrro2-lo.nuria.telefonica-data.net!not-for-mailReferences:
<5b829932.0309011431.6fff8097@posting.google.com>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,568a4d84eb300bba X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2003-09-01 23:44:27 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!cyclone.bc.net!tdsnet-transit!newspeer.tds.net!news-out1.nntp.be!propagator2-sterling!news-in-sterling.nuthinbutnews.com!nsnmrro1-lo.nuria.telefonica-data.net!nsnmrro2-lo.nuria.telefonica-data.net!not-for-mail From: Samuel <444398NOSPAM@celes.unizar.es> Newsgroups: es.comp.os.linux.programacion Subject: Re: Regexp & Perl: Como sustituir varias palabras parecidas Date: Tue, 2 Sep 2003 06:44:17 +0000 (UTC) Organization: Telefonica Data Espagna Lines: 97 Message-ID: <slrnbl8f1v.ks.444398NOSPAM@tizona.no-ip.org> References: <5b829932.0309011431.6fff8097@posting.google.com> NNTP-Posting-Host: 165.red-80-25-246.pooles.rima-tde.net Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: nsnmrro2-gest.nuria.telefonica-data.net 1062485057 22832 80.25.246.165 (2 Sep 2003 06:44:17 GMT) X-Complaints-To: usenet@nsnmrro2-gest.nuria.telefonica-data.net NNTP-Posting-Date: Tue, 2 Sep 2003 06:44:17 +0000 (UTC) User-Agent: slrn/0.9.7.4 (FreeBSD)