Frank Schönmann: Regulärer Ausdruck (Leerzeichen)

Beitrag lesen

hi!

Ich möchte aus einem String alle Leerstellen rausfiltern die grösser
als 1 Leerzeichen-Abstand sind, (...)

Alternative zu den anderen beiden Vorschlägen: ein "look-ahead":

my $text = "Text  mit vielen   Abständen     an mehreren   Stellen.";
    $text =~ s/\s+(?=\s)//g;

Dieser reguläre Ausdruck sucht erst eine Folge von Whitespaces (das
\s+), alles was danach kommt und in (?=pattern) steht, ist eine
Zusatzbedingung, wird aber nicht mehr dem eigentlichen Pattern
zugerechnet. Die Zusatzbedingung ist hier, dass auf das gesuchte
Pattern nochmal ein Whitespace (das zweite \s) folgt. Der reguläre
Ausdruck ersetzt also nur Whitespaces durch einen leeren String, auf
die noch ein weiteres Whitespace folgt.

Möglicherweise ist diese Lösung für dein aktuelles Problem etwas
umständlich. Aber "look-ahead"- oder "look-behind"-Bedingungen sind
manchmal eine sehr elegante Möglichkeit zur Formulierung regulärer
Ausdrücke, die ansonsten nur schwer oder gar nicht möglich wären.

bye, Frank!