Schrift
[thread]8108[/thread]

Mit Perl Sätze zählen



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Gast Gast
 2006-06-24 16:32
#67581 #67581
Hallo,

ich habe in einem Text bestimmte Wörter bzw. Ausdrücke mit ## links und rechts markiert (z.B. ##eine Frage##).

Jetzt möchte ich diese Ausdrücke zählen. Wie würde der Code aussehen? Habe schon alles ausprobiert und bin kurz vorm Verzweifeln.. :(

Lg
Mary
Relais
 2006-06-24 16:48
#67582 #67582
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was hast Du denn alles ausprobiert?

Es gibt da gleich mehrere Ansätze... Du könntest alle # zählen, dann durch 4 teilen... oder Du zählst alle Vorkommen von "##" und teilst durch zwei, das würde genauer, oder noch genauer, wenn Du weißt, ob rechts und links von Dingen wie "##eine Frage##" etwa immer ein Leerzeichen oder ein Zeilenanfang/Zeilenende stünde (oder alternativ sonst nirgends zwei aufeinanderfolgende "#"), dann könntest Du mit einer Regex ganz genau suchen.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Mary
 2006-06-25 18:04
#67583 #67583
User since
2006-06-25
17 Artikel
BenutzerIn
[default_avatar]
[quote=Relais,24.06.2006, 14:48]... oder noch genauer, wenn Du weißt, ob rechts und links von Dingen wie "##eine Frage##" etwa immer ein Leerzeichen oder ein Zeilenanfang/Zeilenende stünde (oder alternativ sonst nirgends zwei aufeinanderfolgende "#"), dann könntest Du mit einer Regex ganz genau suchen.[/quote]
Es sind immer zwei aufeinanderfolgende "#". Ich habe schon verschiedene reguläre Ausdrücke ausprobiert. Er zählt mir nur alle Vorkommen von #, z.B.:

Code: (dl )
$sum = s/#//g;


Alles andere klappt nicht, z.B.:

Code: (dl )
$sum = s/##//g;


Er findet die doppelten "##" nicht... :(
lichtkind
 2006-06-25 18:19
#67584 #67584
User since
2004-03-22
5679 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
wenn du markieren willst brauchst du $text =~ s/(\s\w+)/##$1##/g oder so ähnlich, ich hoffe du verstehst das prinzip.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Strat
 2006-06-25 22:15
#67585 #67585
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
welche zeichen duerfen zwischen jeweils zwei ## vorkommen? wenn es A-Za-z0-9 ist, dann z.B. folgendermaszen
Code: (dl )
my @foundItems = $text =~ / \#\# ([a-zA-Z0-9]+) \#\# /gx;
\n\n

<!--EDIT|Strat|1151259333-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
renee
 2006-06-26 10:29
#67586 #67586
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Mary,25.06.2006, 16:04][quote=Relais,24.06.2006, 14:48]... oder noch genauer, wenn Du weißt, ob rechts und links von Dingen wie "##eine Frage##" etwa immer ein Leerzeichen oder ein Zeilenanfang/Zeilenende stünde (oder alternativ sonst nirgends zwei aufeinanderfolgende "#"), dann könntest Du mit einer Regex ganz genau suchen.[/quote]
Es sind immer zwei aufeinanderfolgende "#". Ich habe schon verschiedene reguläre Ausdrücke ausprobiert. Er zählt mir nur alle Vorkommen von #, z.B.:

Code: (dl )
$sum = s/#//g;


Alles andere klappt nicht, z.B.:

Code: (dl )
$sum = s/##//g;


Er findet die doppelten "##" nicht... :([/quote]
Du hast auch etwas ganz entscheidendes vergessen: die Tilde (~)!

So sollte es funktionieren:
Code: (dl )
$sum =~ s/##//g;


@Strat: # muss man nichst escapen, sind keine Sonderzeichen:
Code: (dl )
1
2
~ 60> perl -le 'my $string = "##hallo##"; my ($var) = $string =~ /##(.*?)##/; print $var;'
hallo
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Dubu
 2006-06-26 11:33
#67587 #67587
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=renee,26.06.2006, 08:29]@Strat: # muss man nichst escapen, sind keine Sonderzeichen:[/quote]
Wenn man /x benutzt, schon. Dann leitet ein '#' einen Kommentar ein.
(Wobei perl offensichtlich so schlau ist und bei einem Einzeiler davon ausgeht, dass keine Kommentare auftreten.)
renee
 2006-06-26 11:58
#67588 #67588
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja, das ist ein "Spezialfall"...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Mary
 2006-07-07 14:59
#67589 #67589
User since
2006-06-25
17 Artikel
BenutzerIn
[default_avatar]
Also, ich habe jetzt alles ausprobiert und es klappt trotzdem nicht.

Mein Programm sieht jetzt so aus:

Code: (dl )
1
2
3
4
while(<>) {
$num += (s/#//g);
}
print $num, "\n";


Das funktioniert.

Aber wenn ich es so ändere:

Code: (dl )
1
2
3
4
while(<>) {
$num += (s/##//g);
}
print $num, "\n";


dann gibt er mir 0 zurück.

Wieso?
renee
 2006-07-07 15:30
#67590 #67590
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Poste mal bitte den Input und das komplette Programm...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2006-06-24 16:32.