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

Zusammenhängende Ziffern/Buchstaben an String-Ende

Beitragvon Graf Wasserrutsche » Mittwoch 18. Februar 2009, 12:08

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?
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Beitragvon gkuhl » Mittwoch 18. Februar 2009, 12:14

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

Beitragvon Craven » Mittwoch 18. Februar 2009, 12:51

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: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 18. Februar 2009, 13:11

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 Modvoice
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Mittwoch 18. Februar 2009, 13:13

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:

Beitragvon Graf Wasserrutsche » Mittwoch 18. Februar 2009, 16:32

Okay, super, vielen Dank!
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Mittwoch 18. Februar 2009, 17:38

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

Wer ist online?

Mitglieder in diesem Forum: Astorek, jan.b