...von hinten anfängt Zeichen zu ersetzen?
Code: Alles auswählen
"foobar('\\') \\".rreplace('\\', ' ', 1) -> "foobar('\\') "
[/OffTopic]
Code: Alles auswählen
"foobar('\\') \\".rreplace('\\', ' ', 1) -> "foobar('\\') "
Code: Alles auswählen
In [6]: "foobar(x) x"[::-1].replace("x", "", 1)[::-1]
Out[6]: 'foobar(x) '
Naja, aber so schwer ist der naechste Schritt dann auch nicht mehrmawe hat geschrieben:Is natürlich Blödsinn, weils nur mit symmetrischen Ersetzungsteilstringsodersonstigendings geht.
Code: Alles auswählen
"foobar(abc) abc"[::-1].replace("abc"[::-1], "xyz"[::-1], 1)[::-1]
Alle?sape hat geschrieben:Vielleicht hat ja jemand nen guten draht zu Guido und sagt ihn mal das wir all eine r variante haben wollen
Code: Alles auswählen
>>> "x a x b x".replace("x", "", 1)
a x b x
>>> "x a x b x".replace("x", "", 2)
x a b x
>>> "x a x b x".replace("x", "", -1)
x a x b
Code: Alles auswählen
>>> "a|b|c|d".replace('|', '_', 1)
a_b|c|d
>>> "a|b|c|d".replace('|', '_', 1, reverse=False)
a_b|c|d
>>>"a|b|c|d".replace('|', '_', 1, reverse=True)
a|b|c_d
>>>"a|b|c|d".replace('|', '_')
a_b_c_d
Nein. Das wäre inkonsistent.Leonidas hat geschrieben:Ich denke mit negativen Zahlen wäre das konsistenter. Schließlich funktionieren Slices genau so.
Code: Alles auswählen
>>> "a|b|c|d".replace('|', '_', 1)
a_b|c|d
>>>"a|b|c|d".replace('|', '_', 2)
a_b_c|d
>>>"a|b|c|d".replace('|', '_', 1)
a_b|c|d
>>>"a|b|c|d".replace('|', '_', -1) # So, -1 ist der Defaultwert ;)
a_b_c_d
>>>"a|b|c|d".replace('|', '_') # = replace('|', '_', -1)
a_b_c_d
Code: Alles auswählen
if "a|b|c|d"[1] == '|': "a|b|c|d"[1] = '_'
Code: Alles auswählen
>>>"a|b|c|d".replace('|', '_', 1, reverse=False)
a_b|c|d
>>>"a|b|c|d".replace('|', '_', 1) # Default ist reverse=False wegen Kompatibilität ;)
a_b|c|d
>>>"a|b|c|d".replace('|', '_', 1, reverse=True)
a|b|c_d
Code: Alles auswählen
>>>"a|b|c|d".rreplace('|', '_', 1)
"a|b|c_d"
Wer hat denn davon gesprochen Strings mutabel zu machen?sape hat geschrieben:Davon abgesehen wäre die Funktion replace überflüssig wen der zweite Parameter ein Slice zu griff wäre weil man dann einfach gleich folgendes schreiben könnte:Code: Alles auswählen
if "a|b|c|d"[1] == '|': "a|b|c|d"[1] = '_'
Keiner. Du sagtest aber das negative Zahlen konsistenter wären, was einem slicing gleich kämme. Das wäre die Schlussfolgerung daraus:Leonidas hat geschrieben:Wer hat denn davon gesprochen Strings mutabel zu machen?sape hat geschrieben:Davon abgesehen wäre die Funktion replace überflüssig wen der zweite Parameter ein Slice zu griff wäre weil man dann einfach gleich folgendes schreiben könnte:Code: Alles auswählen
if "a|b|c|d"[1] == '|': "a|b|c|d"[1] = '_'
Code: Alles auswählen
>>>"a|b|c|d".replace('|', '_', 3)
"a|b_c|d" # Das würde rauskommen wenn auf Index 3 ein | Vorhanden ist. Also wäre es äquivalente mit...
>>>if "a|b|c|d"[3] == '|': "a|b|c|d"[3] = '_'
Code: Alles auswählen
>>>"a|b|c|d".replace('|', '_', -2)
"a|b|c_d"
Code: Alles auswählen
test = "a|b|c|d"
if test[3] == '|':
test = test[0:3] + '_' + test[3:]
print test
Code: Alles auswählen
>>>"a|b|c|d".replace('|', '_', 3)
"a|b_c|d" # Das würde rauskommen wenn auf Index 3 ein | Vorhanden ist. Also wäre es äquivalente mit...
>>>if "a|b|c|d"[3] == '|': "a|b|c|d"[3] = '_'
Code: Alles auswählen
>>> "x a x b x".replace("x", "_", 2)
x a _ b x
Code: Alles auswählen
>>> "xaxbxcxdxexfxgx".replace("x", "_", 1, 6, 2)
xa_bxc_dxe_fxgx
OK, damit könnte ich mich auch anfreunden mit nem range. Aber wozu ist dann noch der dritte Parameter gut? der 4 und 5 reicht doch dann. Oder ich habs doch nicht verstanden ^^ Aber wie willst du damit realisieren das er auch von rückwärts anfängt? Mit negativen Indexen? Geht das überhaupt in nem range? -> Gleich mal testen ^^mawe hat geschrieben: Man könnte dann mit 4. und 5. Parameter eine Art range machen:Code: Alles auswählen
>>> "xaxbxcxdxexfxgx".replace("x", "_", 1, 6, 2) xa_bxc_dxe_fxgx