perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 31
Click for quality!




11.02.2012 / 12:52

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragEinfaches Regular Expression Problem oder?
Seitenanfang
Hallo,

ich häng schon seit einer Weile an einem einfachen RegEx Problem, aber ich komm einfach nicht drauf.
Mein Problem, ich hab einen Text bei dem ein jedes Wort mit einem bestimmten Tag versehen ist
z.B.:
Max/NPP Mustermann/NPP ist/NCC super/ADD...

ich will aus dem Dokument jetzt einfach alle Wörter mit dem Tag /NPP extrahieren, aber irgendwas mach ich falsch. In meinem Code überspringt er manche die auch /NPP als Tag haben, oder gibt gar nichts aus.
Es soll eigentlich ausgeben:
Max
Mustermann
...

Mein sicher nicht perfekter Code

[code]

#! /usr/bin/perl -w


$file = 'C:\Perl Source\readme.txt'; # Filename zuweisen
open(FILE, $file); # File öffnen

while(<FILE>){

#$match=$_;
$match = m/(.+?)\/NNP$/;



print "$1 \n";

}

close(FILE);
[code/]

für verbesserungs Vorschläge bin ich sehr Dankbar!

Gruß backstaia_ki

Datum: 19.12.2006-12:58

Beitragre: Einfaches Regular Expression Problem oder?
Seitenanfang
Schau mal ob das hier weiterhilft:

use strict;
use warnings;

my $file = 'C:\Perl Source\readme.txt'; # Filename zuweisen
open(FILE, $file); # File öffnen

while(<FILE>){

my $match=$_;
my @ergebnis;

push(@ergebnis,$match =~ /\s*([^\/NPP]+)\/NPP/g);

foreach(@ergebnis){
print "$_\n";
}

}

close(FILE);

Gruß TommyB

Datum: 19.12.2006-14:08

Beitragre: Einfaches Regular Expression Problem oder?
Seitenanfang
Oh verdammt bist du gut! Funkt einwandfrei! Auf das wäre ich in 100 Jahren nicht gekommen. Das mit dem Match auf das Leerzeichen und auf das Ende des strings \/NPP war mir klar, aber das dazwischen ([^\/NPP]+) ist mir ein Rätsel.

DAnk!
backstaia_ki

Datum: 19.12.2006-14:36

Beitragre: Einfaches Regular Expression Problem oder?
Seitenanfang
Achtung, funktioniert NICHT !!!

habs jetzt erst getestet.
Mach mal aus Max Nax, dann siehst du das Problem...

Weis auch nicht, was mich da vorhin "geritten" hat, aber ich arbeite an einer Lösung...

gruß TommyB

Datum: 19.12.2006-15:38

Beitragre: Einfaches Regular Expression Problem oder?
Seitenanfang
Hallo nochmal,

stimmt es funkt fast perfekt. Also bei meinem Daten Satz ist nur ein Problem
Testdaten:
MGS4/NNP Rumored/JJ for/IN Xbox/NNP 360/CD
Is/VBZ Konami/NNP forcing/VBG Kojima's/NNP hand?/NN
Ist nur das Problem das er bei Konami/NNP als Ergebnis VBZ Konami liefert.
Problem tritt immer auf wenn ein /VBZ oder/VBG einem /NNP folgt.
Seltsam...
Aber Danke für die Hilfe!

Gruß backstaia_ki

Datum: 19.12.2006-15:55

Beitragre: Einfaches Regular Expression Problem oder?
Seitenanfang
versuch es mal so

use strict;
use warnings;

my $file = 'C:\Perl Source\readme.txt'; # Filename zuweisen
open(FILE, $file); # File öffnen

while(<FILE>)
{
chomp;
my @words = split(/\s+/, $_);

for (@words)
{
print qq($1\n) if (/(\w+)\/NPP$/);
}
}

close(FILE);

Datum: 19.12.2006-16:52

Beitragre: Einfaches Regular Expression Problem oder?
Seitenanfang
Funktioniert vermutlich auch nicht ganz, da \w z.B. keine Apostrophe (wie in "Kojima's/NNP") erfasst. Könnte man noch hinzufügen, aber hier mein Vorschlag (getestet):

use strict;

open FILE, "test.txt";
my @words;


while(<FILE>)
{ push @words, /\S+(?=\/NNP)/g; }


print join "\n", @words;

Datum: 22.12.2006-20:57

-






-
-