Tipp des Tages: Anzahl der Leerzeichen zu Beginn einer Zeichenkette zählen

Ob eine Zeichenkette mit einem oder mehreren Leerzeichen beginnt, lässt sich über die startswith()-Function des str-Objekts, dem die Zeichenkette zugrundeliegt, sehr einfach feststellen.

Möchte man aber die genaue Zahl der Leerzeichen, wird es etwas aufwändiger. Wer wie ein klassischer Entwickler denkt, versucht es vielleicht mit einer Schleife, die alle Zeichen bis zum nächsten Zeichen durchgeht, das kein Leerzeichen ist. Mit Hilfe eines regulären Ausdrucks (auch Regex genannt), geht es ein wenig einfacher.

Voraussetzung ist, dass das Modul re importiert wurde. Dann gibt es u.a. die findall()-Function, die mit zwei Werten aufgerufen wird:

>Einem regulären Ausdruck

>Dem Text, in dem die „Muster“ gefunden werden sollen

Der Text ist die Zeichenkette, die mit Leerzeichen beginnt. Das war einfach. Beim Muster wird es etwas „komplizierter“, denn man muss sich natürlich ein wenig mit der Schreibweise regulärer Ausdrücke auskennen.

Die Erklärung in absoluter Kurzform:

\s steht für ein Leerzeichen

der folgende * steht für 0, 1 oder beliebig viele Zeichen, in diesem Fall also Leerzeichen

durch die runden Klammer wird eine Gruppe gebildet

der Punkt steht für ein beliebiges Zeichen

der folgende * steht wieder für 0, 1 oder beliebig viele Zeichen, in diesem Fall kann es ein beliebiges Zeichen sein

Der Aufruf von findall() gibt eine Liste aller „Treffer“zurück. Und da der Treffer aus zwei Gruppen besteht, resultiert eine Liste mit Listen. Da es um die erste Gruppe im ersten Treffer geht, sieht der Aufruf wie folgt aus:

t = "    abc"
len(re.findall("(\s*)(.*)",t)[0][0])

Reguläre Ausdrücke wirken auf den ersten Blick unglaublich kryptisch und kompliziert. Sie sind es aber nicht bzw. mit einfachen Grundregeln kommt ihr bereits sehr weit. Die wichtigste Merkregel für den Anfang ist immer: Der * ist kein Platzhalter (sondern eine Mengenangabe) und der unscheinbare Punkt steht für ein beliebiges Zeichen.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.


Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.