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?
Zusammenhängende Ziffern/Buchstaben an String-Ende
-
- User
- Beiträge: 37
- Registriert: Donnerstag 17. Juli 2008, 06:59
- Wohnort: Köln
- Kontaktdaten:
[url=http://myspace.com/deathmetalvictory][myspace][/url][url=http://grunzgewitter.blogspot.com][blog][/url][url=http://twitter.com/AgatheBauer][twitter][/url]
Hi,
zum Zählen reicht einfach:
Ansonsten würde ich mich mal in er Doku beim String-Module umschauen.
Grüße
Gerrit
zum Zählen reicht einfach:
Code: Alles auswählen
In [1]: "TEST123XXXX".count("X")
Out[1]: 4
Grüße
Gerrit
So zählst du jedes X, auch die nicht zusammenhängenden.gkuhl hat geschrieben:Hi,
zum Zählen reicht einfach:Ansonsten würde ich mich mal in er Doku beim String-Module umschauen.Code: Alles auswählen
In [1]: "TEST123XXXX".count("X") Out[1]: 4
Grüße
Gerrit
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
-
- 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
Du brauchst den String nicht in eine Liste unmzuwandeln. Du kanst auch direkt darüber iterieren.
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
>>> x = "TEST123XXXXXXXXXX"
>>> x[::-1]
'XXXXXXXXXX321TSET'
>>> for i in x[::-1]: print i
X
X
X
X
X
X
...
Code: Alles auswählen
>>> import re
>>> len(re.findall(x[-1] + '*$', x)[0])
10
-
- 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]