Zusammenhängende Ziffern/Buchstaben an String-Ende

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Graf Wasserrutsche
User
Beiträge: 37
Registriert: Donnerstag 17. Juli 2008, 06:59
Wohnort: Köln
Kontaktdaten:

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?
[url=http://myspace.com/deathmetalvictory][myspace][/url][url=http://grunzgewitter.blogspot.com][blog][/url][url=http://twitter.com/AgatheBauer][twitter][/url]
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

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
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

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.
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

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
Graf Wasserrutsche
User
Beiträge: 37
Registriert: Donnerstag 17. Juli 2008, 06:59
Wohnort: Köln
Kontaktdaten:

Okay, super, vielen Dank!
[url=http://myspace.com/deathmetalvictory][myspace][/url][url=http://grunzgewitter.blogspot.com][blog][/url][url=http://twitter.com/AgatheBauer][twitter][/url]
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

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 ;))
Antworten