|
| split problem Fra : Dieter Britz |
Dato : 21-01-08 16:25 |
|
Hvad er der galt med
@initials = split (/[A-Z][a-z]*/, $firstname);
$firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
et par bestående af et stort og et lille, skal de blive sammen. Det
dækker så tilfældet af initialerne Yu (for russisk Yuri).
Jeg printer $firstname, og det er OK, fx "AB", men når jeg så printer
@initials, kommer der ingenting ud.
?
--
Dieter Britz (britz<at>chem.au.dk)
| |
Thorbjørn Ravn Ander~ (21-01-2008)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 21-01-08 18:41 |
|
Dieter Britz <britz@chem.au.dk> writes:
> $firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
> enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
> et par bestående af et stort og et lille, skal de blive sammen. Det
> dækker så tilfældet af initialerne Yu (for russisk Yuri).
>
> Jeg printer $firstname, og det er OK, fx "AB", men når jeg så printer
> @initials, kommer der ingenting ud.
split er beregnet til at skille felter ad ud fra nogen tegn man egentlig
ikke er interesseret i. Du kan sætte parantes om dit regexp og så få
dem med ud. "perldoc -f split" har nogen gode debugtrick til at få
det på plads.
Prøv den her i stedet:
$ perl -le '$a = "<AYuB>"; print join(":", $a =~ m/[A-Z][a-z]*/g)'
A:Yu:B
--
Thorbjørn Ravn Andersen
| |
Dieter Britz (22-01-2008)
| Kommentar Fra : Dieter Britz |
Dato : 22-01-08 09:44 |
|
Thorbjørn Ravn Andersen wrote:
> Dieter Britz <britz@chem.au.dk> writes:
>
>> $firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
>> enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
>> et par bestående af et stort og et lille, skal de blive sammen. Det
>> dækker så tilfældet af initialerne Yu (for russisk Yuri).
>>
>> Jeg printer $firstname, og det er OK, fx "AB", men når jeg så printer
>> @initials, kommer der ingenting ud.
>
> split er beregnet til at skille felter ad ud fra nogen tegn man egentlig
> ikke er interesseret i. Du kan sætte parantes om dit regexp og så få
Ah, seføli! Nu forstår jeg hvad problemet er, jeg splittede en række
ingenting ad. Jeg er helt ny til Perl, som i nok kan se. Jeg er i gang
med at konvertere en bibliografi (ca. 1400 items) skrevet i min egen
stil, til BibTex form, og det aktuelle problem var at lave sådan
noget som "Blow JYu" om til "J. Yu. Blow and " osv. Nu kommer jeg
videre.
>
> Prøv den her i stedet:
>
> $ perl -le '$a = "<AYuB>"; print join(":", $a =~ m/[A-Z][a-z]*/g)'
> A:Yu:B
Tak!
--
Dieter Britz (britz<at>chem.au.dk)
| |
Michael Zedeler (21-01-2008)
| Kommentar Fra : Michael Zedeler |
Dato : 21-01-08 19:47 |
|
Dieter Britz wrote:
> Hvad er der galt med
>
> @initials = split (/[A-Z][a-z]*/, $firstname);
>
> $firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
> enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
> et par bestående af et stort og et lille, skal de blive sammen. Det
> dækker så tilfældet af initialerne Yu (for russisk Yuri).
Prøv at kigge på output når man kører dette her:
print join(':', 1, 2, 3, 10), "\n";
print join(':', split(/_/, 'abc_defg_hiJK_L') ), "\n";
print join(':', split(/[A-Z][a-z]*/, 'Ab_CD_efg_h') ), "\n";
split gør nok ikke det du forventer - kig i manualen (man perlfunc) og
se om ikke der står noget i perlre (man perlre) du kan bruge i stedet.
Mvh. Michael.
| |
|
|