Seite 1 von 1

Zusammenhängende Ziffern/Buchstaben an String-Ende

Verfasst: Mittwoch 18. Februar 2009, 12:08
von Graf Wasserrutsche
Guten Tag zusammen!

Ich bin auf der Suche nach einer Methode am Anfang oder Ende eines Strings nach dort befindlichen zusammenhängenden Ziffern/Buchstaben zu suchen und die Anzahl dieser auszugeben.

Bsp. TEST123XXXXXXXXXX

Wie schaffe ich es die Anzahl von X zu bestimmen? Meine bisherigen Versuche beliefen sich darauf, dass ich aus dem String eine Liste mache, diese umdrehe und mit einer for-Schleife durch die Elemente zähle und einen Counter für die Anzahl der Stellen hochzähle.

Das funktioniert, scheint mir aber irgendwie viel zu umständlich. Ich habe noch bei den regular expressions nachgeschaut, finde aber irgendwie nicht das was ich brauche.

Kann mir vielleicht jemand einen Tipp geben, wonach ich schauen bzw. mich beschäftigen muss? Liege ich mit den regular expressions gar nicht so falsch?

Verfasst: Mittwoch 18. Februar 2009, 12:14
von gkuhl
Hi,
zum Zählen reicht einfach:

Code: Alles auswählen

In [1]: "TEST123XXXX".count("X")
Out[1]: 4
Ansonsten würde ich mich mal in er Doku beim String-Module umschauen.


Grüße
Gerrit

Verfasst: Mittwoch 18. Februar 2009, 12:51
von Craven
gkuhl hat geschrieben:Hi,
zum Zählen reicht einfach:

Code: Alles auswählen

In [1]: "TEST123XXXX".count("X")
Out[1]: 4
Ansonsten würde ich mich mal in er Doku beim String-Module umschauen.


Grüße
Gerrit
So zählst du jedes X, auch die nicht zusammenhängenden.

Verfasst: Mittwoch 18. Februar 2009, 13:11
von Leonidas
Spaßige, funktionale Lösung:

Code: Alles auswählen

In [9]: s = 'XXX123XXXX'
In [10]: import functools, itertools, operator
In [11]: len(list(itertools.takewhile(functools.partial(operator.eq, 'X'), s)))
Out[11]: 3
In [12]: len(list(itertools.takewhile(functools.partial(operator.eq, 'X'), reversed(s))))
Out[12]: 4

Verfasst: Mittwoch 18. Februar 2009, 13:13
von HerrHagen
Du brauchst den String nicht in eine Liste unmzuwandeln. Du kanst auch direkt darüber iterieren.

Code: Alles auswählen

>>> x = "TEST123XXXXXXXXXX"
>>> x[::-1]
'XXXXXXXXXX321TSET'
>>> for i in x[::-1]: print i
    
X
X
X
X
X
X
...
RE gehen natürlich auch. Aber ich mag es irgendwie nicht so bei solchen einfachen Sachen unnötige Abhängigkeiten reinzubekommen (wenn auf Geschwindigkeit nicht ankommt).

Code: Alles auswählen

>>> import re
>>> len(re.findall(x[-1] + '*$', x)[0])
10

Verfasst: Mittwoch 18. Februar 2009, 16:32
von Graf Wasserrutsche
Okay, super, vielen Dank!

Verfasst: Mittwoch 18. Februar 2009, 17:38
von str1442
Ansonsten würde ich mich mal in er Doku beim String-Module umschauen.
Wovon die meisten aber durch Stringmethoden abgelöst wurden (bevor man irgendwann string.zfill() in Showcase sieht ;))