Sorry, ich hab' irgendwie keine passende Kategorie im Forum entdeckt.
Ich suche einen Code-Ausschnitt, der alle zwischen zwei Teilstrings liegenden Teile ausliest und in eine Liste fügt. Beispiel
string = abcadcaec
Alle Elemente die zwischen 'a' und 'c' liegen
Ergebnis : ['b', 'd', 'e']
Wäre schön, wenn mir jemand einen Tipp geben könnte.
Markus
Edit (Leonidas): In Allgemeine Fragen verschoben.
Teilstring auslesen
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Code: Alles auswählen
s = "abcadcaec"
s2 = s[s.find('a')+1:s.rfind('c')]
s3 = s2.replace('c', '').replace('a', '')
list(s3)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Markus,
oder mit re:
Gruß
Dookie
oder mit re:
Code: Alles auswählen
import re
txt = "abcadcaec"
res = re.findall("a([^c]*)", txt)
print res
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Danke für die Hilfe! Sorry, habe gerade angefangen Python zu lernen. Werde mich jetzt mal intensiver den RegExs zuwenden 
Markus

Markus
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Die sind auch nicht so wichtig, solange du nicht zu ausgefallene Strings zerlegen willst, Python ist ja kein Perl oder Ruby.Markus hat geschrieben:Danke für die Hilfe! Sorry, habe gerade angefangen Python zu lernen. Werde mich jetzt mal intensiver den RegExs zuwenden
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ich vermute mal, Guido Van Rossum (hat der einen spitznamen?) wollte keine /regexps/ in seiner sprache, weil man sie in Perl gern zulasten der performance aus faulheit benutzt. "import re" zwingt den programmierer, etwas mehr nachzudenken.
aber wenn ich mir die beispiele oben anschaue, frage ich mich, ob das wirklich sinnvoll war.
so schön kurz ist. aber natürlich kann man auch in Ruby so etwas machen:macht aber keiner.
andere funktionen wie startswith fehlen in Ruby leider. hoffentlich schaut man sich die noch von Python ab
aber wenn ich mir die beispiele oben anschaue, frage ich mich, ob das wirklich sinnvoll war.
stimmt, in Ruby kommt man keine 2 meter weit ohne regexps, weilLeonidas hat geschrieben:Die sind auch nicht so wichtig, solange du nicht zu ausgefallene Strings zerlegen willst, Python ist ja kein Perl oder Ruby.
Code: Alles auswählen
puts 'Moth found in Relay #70 Panel F'[/\w{5}/] #-> found
Code: Alles auswählen
s = 'abcadcaec'
s2 = s[s.index('a')+1...s.index('c')]
s3 = s2.sub('c', '').sub('a', '')
puts s3
andere funktionen wie startswith fehlen in Ruby leider. hoffentlich schaut man sich die noch von Python ab

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Sind auch erst letztens in Python reingekommenmurphy hat geschrieben:andere funktionen wie startswith fehlen in Ruby leider. hoffentlich schaut man sich die noch von Python ab

My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Weil Python ja für das Motto There's only one way to do it berüchtigt ist, hier noch eine (sehr intelligente *räusper*) Variante:
Gruß, mawe
Weil Python ja für das Motto There's only one way to do it berüchtigt ist, hier noch eine (sehr intelligente *räusper*) Variante:
Code: Alles auswählen
>>> x = "abcadcaec"
>>> [i.lstrip('a') for i in x.split('c') if i]
['b', 'd', 'e']
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nicht immer.. aber Performance spielt doch bei Python sowieso eher eine untergeordnete Rolle. Readability counts. Es ist ja auch soft so, dass eine ausgefeilte Methode auch manchmal durch ein Regex ausgedrückt werden kann, was die aufgabe dann doch einfacher löst. Hängt halt vom Verwendungszweck ab.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ausgefeilt "zu Fuss" würde "in Python" bedeuten, also "kämpft" man schon mal gegen eine re-Implementierung in C an. Und dann sind re-Implementierungen auf Suchen von Zeichenketten spezialisiert. Ein regulärer Ausdruck ohne die ganzen "Sonderzeichen" kann unter Umständen sogar schneller sein als die "naive" Suche die man mit `str.find()` bekommt.jens hat geschrieben:Außerdem sind re-Geschichten meist langsamer, als wenn man es ausgefeilt "zu Fuss" macht... oder?
Hier gilt wie bei allen Leistungsfragen: Messen, messen und nochmals messen.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Als beispiel meinte ich unsere suche nach den optimalsten formatter: http://www.python-forum.de/viewtopic.php?t=371
Dabei waren die Varanten mit re, langsamer als eine Lösung zu fuss.
Wobei in dem Beispiel auch die Datenmende extrem klein ist, fällt mir gerade mal so ein.
Dabei waren die Varanten mit re, langsamer als eine Lösung zu fuss.
Wobei in dem Beispiel auch die Datenmende extrem klein ist, fällt mir gerade mal so ein.