Perl Regex Ausdruck um ganze Sätze zu finden

Heyho!

Bin langsam am verzeifeln… Habe in einem String einen langen Text, welcher aus mehreren Sätzen besteht.

Nun möchte ich mit einem regex einen Mittelsatz herausholen. Das klappt mit z.B.:

$inhalt=~/.{150,300}[.!?] (\b.{150,250}.\b)/;

auch ganz gut (bei langen Inhalten!)
Gewollt war hier, dass erst ein Satz gefunden wird, welcher ab dem 150sten Zeichen beginnt, wenn ein .! oder ? den vorherigen Satz geschlossen hat. Ab dort dann also den Satz rausholen welcher mindestens 150 und maximal 250 lang ist. (können auch 2 oder mehrere Sätze dann sein).

Nun hab ich damit aber ein Problem mit kürzeren Texten ;-(

Da erhalte ich nämlich gar kein Ergebnis. Und das ist mein Problem.

Dachte, ich mache dass dann halt variabel, indem ich einfach drei Stufen durchlaufe:

for (my $i=3;$i>0;$i–)
{
my $wert1 = 50 * $i;
my $wert2 = 100 * $i;

my $wert3 = 150;
my $wert4 = length($inhalt)+1;

$inhalt=~/.{$wert1,$wert2}[.!?] (\b.{$wert3,$wert4}.\b)/;
$teilstring = $1;
if (length($teilstring>20)) {last;}
}

Das klappt dann nun aber auch nicht… Ach, es könnte auch sein, dass gerade der Satz, welcher in den ersten Ausdruck passen würde, bis zum Ende der Zeile geht und kein Satzzeichen zum Schluss mehr beinhaltet. Das müsste auch berücksichtigt werden.

Kurzum, mir raucht der Kopf und komm grad nicht mehr weiter.

Ein Beispielsatz, mit dem es nicht funktioniert ist folgende Konstellation:
bsp: Aktuelles Impressionen Jahreskalender Mitteilungen Information Öffnungszeiten Preise Anfahrt Lage Wennschondennschon Kontakt Adresse Unser Team Newsletter Angebot Preise Impressum Wetter Mitglied Mail Entspannen. .ein Erlebnis im Grossraumbüro Oschersleben! Workout für Körper und Geist finden die Besucher in der komfortablen Pauseecke. Das Team der staatlich geführten Workoutbteilung hält neben Arbeit und Brossmuskelaufbau Anwendungen auch besondere Chefbehandlungen bereit. Die KaffeTeeBar im Pausenbereich bietet kleine Snacks und Getränke für zwischendurch an.

Nicht über den Inhalt wundern, frei erfunden :wink:

Hallo,

für mich hört sich das so an, als ob es einfacher wäre, erst mal den ganzen Text nach Interpunktion aufzuspalten, und dann in einem zweiten Schritt die Teile zu extrahieren, die dich interessieren - wäre das in deinem Fall möglich?

Wenn nein würde es helfen, wenn du beim Beispiel auch noch mit dazu sagts, was du genau als Ausgabe willst, und was in deiner derzeitigen Version nicht funktioniert.

Grüße,
Moritz

Danke!
Nun frag ich mich hinterher, warum ich es so kompliziert angefangen hatte :wink:

Dein Tipp war völlig richtig, ist nebenbei auch eine enorme Temposteigerung!

Danke dir recht herzlich!