RegEx für Sätze
split.s
- perl
Hi
ich suche einen Regex der ein Ersatz zu substr darstellt und etwas abschneidet. Allerdings erst am nächsten Satzende, wenn der Gesamtstring länger ist als 20 Zeichen.
Zusammenfassung:
Wenn String länger ist als 20 Zeichen, dann soll er den Satz noch beenden, bevor er abschneidet.
Beispiel:
"Dies ist ein Satz der länger ist als 100 Zeichen. Hier folgt ein weiterer Satz"
Daraus würde dann werden:
"Dies ist ein Satz der länger ist als 100 Zeichen."
Hi
das Modul Text::Autoformat könnte Dein Vorhaben evntl. ganz elegant lösen...
Viele Grüße,
Hotte
gudn tach!
Wenn String länger ist als 20 Zeichen, dann soll er den Satz noch beenden, bevor er abschneidet.
$str=~s/^(.{1,19}(?:$|.|[^.]+)).*/$1/;
max. 19 beliebige zeichen, gefolgt von einem der drei folgenden dinger:
a) stringende (abschliessender zeilenumbruch erlaubt)
b) punkt
c) beliebig langer string, der aus nicht-punkten besteht
und schliesslich dem abzuschneidenen rest.
klar ist, dass hier keine ueberpruefung erfolgt, ob bspw. der punkt hinter abkuerzungen ein satz-ende darstellt oder nicht. ebenso gibt es ja noch weitere satz-ende-zeichen wie z.b. ?, !, ... etc.
prost
seth
$str=~s/^(.{1,19}(?:$|.|[^.]+)).*/$1/;
etwas leserlich
$str=~s/^
(.{1,19}
(?:
$
|
.
|
[^.]+
) # da ist etwas falsch
).*
/$1/x;
Das lässt sich aber leicht beheben.
Leider bleibt der Ansatz falsch, und unlösbar, wenn man den Terminus 'Satz' für Perl nicht spezifiziert und auch nicht verlangt, dass sich Input an eine solche Spezifikation zu halten habe.
Im Glücksfall gehts mit Css:
overflow:auto
mfg Beat
gudn tach!
$str=~s/^(.{1,19}(?:$|.|[^.]+)).*/$1/;
etwas leserlich
gwohnheits-/geschmackssache.
) # da ist etwas falsch
stimmt, der punkt wird u.u. mitabgeschnitten. oder meintest du was anderes?
Das lässt sich aber leicht beheben.
haettest ruhig angeben koennen, wie. ;-)
$str=~s/^(.{1,19}(?:$|.|[^.]+.)).*/$1/;
prost
seth