Schrift
[thread]6388[/thread]

Perl regex Fehler (Seite 2)



<< |< 1 2 >| >> 20 Einträge, 2 Seiten
dax42
 2004-07-09 13:21
#84086 #84086
User since
2004-06-16
24 Artikel
BenutzerIn
[default_avatar]
Die Rs, die ohne Ts in einer Zeile stehen (siehe erste Zeile im Beispiel) kann ich allerdings nicht gebrauchen...

Echt super, das einem hier so schnell geholfen wird. Danke!
Crian
 2004-07-09 13:29
#84087 #84087
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
ok, dann so?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my @link;

while (<DATA>) {
my @l = m~<a\s[^>]+>([^<>]+)</a>~ig;
next unless 3 == @l;
push @link, grep {$_ =~ /^[RT]\d+$/} @l;
}

print "$_\n" for @link;

_ _ D A T A _ _
<A HREF="/pub/databases/transfac/doc/gene1.html#BS" target="_new">BS</A> -202 -135 <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=R00929">R00929</A>; HS$IFNB_14.
<A HREF="/pub/databases/transfac/doc/gene1.html#BS" target="_new">BS</A> -167 -94 <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=R00916">R00916</A>; HS$IFNB_01; Binding factors: R2 <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=T00712">T00712</A>.
<A HREF="/pub/databases/transfac/doc/gene1.html#BS" target="_new">BS</A> -100 -61 <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=R00917">R00917</A>; HS$IFNB_02; Binding factors: IRF1 <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=T00422">T00422</A>, IRF-2
<A HREF="/pub/databases/transfac/doc/gene1.html#BS" target="_new">BS</A> <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=T00425">T00425</A>.


Ausgabe

Code: (dl )
1
2
3
4
R00916
T00712
R00917
T00422
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
dax42
 2004-07-10 11:58
#84088 #84088
User since
2004-06-16
24 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich bin ein wenig verzweifelt. Eure Lösungen waren ja super schön, bis mir ein "Fehler" aufgefallen ist, an den ich selbst nicht gedacht hatte:
Ich will nur die Links matchen, die in den Zeilen stehen, die mit BS anfangen. Die Zeile nach der letzten solchen Zeile beginnt mit XX.

Das ist notwendig, da auch in anderen Zeilen Links stehen, die [RT][0-9]+ matchen, die aber für mich von keiner Relevanz sind (und zu falschen Ergebnissen führen.)

Nun habe ich das folgende versucht:
Code: (dl )
1
2
3
4
my @data = $c =~ /<A[^>]+>BS<\/A>(?:.*<A[^>]+>([RT][0-9]+)<\/A>.*)+XX/sg;
for(my $i = 0; $i<=$#data; $i++){
print "$data[$i] \n";
}


Allerdings erhalte ich damit nicht alle matches, sondern immer nur den letzten. Warum? Wie kann ich alle dazwischen liegenden ausgeben lassen?

Danke vielmals!
dax42
 2004-07-10 14:07
#84089 #84089
User since
2004-06-16
24 Artikel
BenutzerIn
[default_avatar]
So, ich hab das Problem jetzt folgendermaßen gelöst (falls es jemanden interessiert). Ist wahrscheinlich nicht gerade die effizienteste Lösung, aber wenigstens ist es überhaupt gelöst.

Erst hole ich mir in ein array alle Zeilen, die mit BS beginnen. Dann mache ich das Array wieder zu einem String und extrahiere mir dann aus dem alle Rs und Ts.

Code: (dl )
1
2
3
my @resultset =  $c =~ /<A[^>]+>BS<\/A>(.*)\n/g;
my $result = join '',@resultset;
my @data = $result =~ /<A[^>]+>([RT][0-9]+)<\/A>/g;
Strat
 2004-07-11 00:40
#84090 #84090
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
also diesen code verstehe ich heute nicht mehr... ich wuerde fuer sowas CPAN:HTML::LinkExtor verwenden... einen beispielcode habe ich gerade mal in einem anderen Thread geschrieben... oder steht auch im Perl-Kochbuch
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
dax42
 2004-07-11 13:14
#84091 #84091
User since
2004-06-16
24 Artikel
BenutzerIn
[default_avatar]
Tja, das Problem mit LinkExtor ist nur, dass ich dazu das Modul installieren müsste. Ich besitze aber auf dem Rechner, auf dem ich arbeite keine Installationsrechte und es ist auch nicht so leicht, jemanden zum Install zu überreden.

Ausserdem... gibt mir LinkExtor nicht einfach alle Links zurück? Dann kann ich ja nicht mehr prüfen, ob die Links auch aus den Zeilen kommen, die ich haben will... (siehe Thread oben)
pq
 2004-07-11 13:48
#84092 #84092
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=dax42,11.07.2004, 11:14]Tja, das Problem mit LinkExtor ist nur, dass ich dazu das Modul installieren müsste. Ich besitze aber auf dem Rechner, auf dem ich arbeite keine Installationsrechte
[/quote]
was denn, du kennst unsere faq nicht?
http://wiki.perl-community.de/bin....inModul
ich nehme jetzt einfach mal an, mit "keine installationsrechte" meinst du,
du bist nicht root. na und? du kannst dir doch so ziemlich jedes programm
im eigenen verzeichnis installieren (wenn ich wo arbeiten muss, wo kein
pine oder eine zu alte vim-version drauf ist, oder kein opera vorhanden,
installier ich mir das halt selbst). denn auf dein verzeichnis hast du ja
schreibrechte.
so, und genau so kann man das mit jedem perl-modul machen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2004-07-11 23:16
#84093 #84093
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Das Problem ist mehr, dass in seinem Fall LinkExtor und ähnliches nicht mehr den Zuasammenhang aufzeigt, ob der Link aus einer Zeile mit BS-Link kam. Da muss man wohl wirklich zu Fuß ran.

Schön, dass Du es hinbekommen hast :-)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
jan
 2004-07-11 23:34
#84094 #84094
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
HTML::Parser könnte das noch schaffen ... man müsste sich nur jeweils den status merken (in zelle, in xyz) und dann den link entsprechend zuordnen ...
Crian
 2004-07-12 00:12
#84095 #84095
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
ah gut (hab weder mit dem Parser noch mit dem LinkExtor gearbeitet)

dann wär das bei der nächsten Umsetllung vielleicht eine Alternative
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2004-07-09 12:20.