Bu yüzden aynı formatta uzun bir dizge listem var ve son "" u bulmak istiyorum. karakterini girin ve ". -" ile değiştirin. Rfind kullanmayı denedim, ancak bunu yapmak için doğru şekilde kullanamıyorum.
Bu yüzden aynı formatta uzun bir dizge listem var ve son "" u bulmak istiyorum. karakterini girin ve ". -" ile değiştirin. Rfind kullanmayı denedim, ancak bunu yapmak için doğru şekilde kullanamıyorum.
Yanıtlar:
Bu yapmalı
old_string = "this is going to have a full stop. some written sstuff!"
k = old_string.rfind(".")
new_string = old_string[:k] + ". - " + old_string[k+1:]
Sağdan değiştirmek için:
def replace_right(source, target, replacement, replacements=None):
return replacement.join(source.rsplit(target, replacements))
Kullanımda:
>>> replace_right("asd.asd.asd.", ".", ". -", 1)
'asd.asd.asd. -'
replacements=None
parametreye sahip olmak bana bir hata gibi görünüyor çünkü parametre atlanırsa işlev bir hata verecektir (Python 2.7'de denendi). Ya varsayılan değeri kaldırmanızı, -1 olarak ayarlamanızı (sınırsız değiştirme için) ya da daha iyi hale getirmenizi öneririm replacements=1
(ki bu, OP'nin istediği şeye göre bu belirli işlev için varsayılan davranış olmalıdır). Dokümanlara göre bu parametre isteğe bağlıdır, ancak verilmişse bir int olmalıdır.
". -".join("asd.asd.asd.".rsplit(".", 1))
. Yaptığınız tek şey, 1 kez sağ taraftan bir dizi ayırma gerçekleştirmek ve değiştirmeyi kullanarak dizeyi tekrar birleştirmektir.
Bir normal ifade kullanırdım:
import re
new_list = [re.sub(r"\.(?=[^.]*$)", r". - ", s) for s in old_list]
\.(?=[^.]*$)
Bir tek satırlık:
str=str[::-1].replace(".",".-",1)[::-1]
.replace
Ters bir ip üzerinde yapıyorsun . Her iki dizenin replace
de tersine çevrilmesi gerekiyordu. Aksi takdirde, dizeyi ikinci kez ters çevirdiğinizde, eklediğiniz harfler geriye doğru olacaktır. Bunu yalnızca bir harfi tek bir harfle değiştiriyorsanız kullanabilirsiniz ve o zaman bile bunu kodunuza koymam, çünkü gelecekte birisinin onu değiştirmesi ve bir kelimenin neden sdrawkcab yazıldığını merak etmeye başlaması.
Sağdan kelimenin ilk geçtiği yeri değiştiren aşağıdaki işlevi kullanabilirsiniz.
def replace_from_right(text: str, original_text: str, new_text: str) -> str:
""" Replace first occurrence of original_text by new_text. """
return text[::-1].replace(original_text[::-1], new_text[::-1], 1)[::-1]
a = "A long string with a . in the middle ending with ."
# herhangi bir dizenin son oluşumunun dizinini bulmak istiyorsanız, bizim durumumuzda # ile son oluşumunun dizinini bulacağız
index = a.rfind("with")
# dizin 0'dan başladığından sonuç 44 olacaktır.
Naif yaklaşım:
a = "A long string with a . in the middle ending with ."
fchar = '.'
rchar = '. -'
a[::-1].replace(fchar, rchar[::-1], 1)[::-1]
Out[2]: 'A long string with a . in the middle ending with . -'
Aditya Sihag'ın tek bir cevabı rfind
:
pos = a.rfind('.')
a[:pos] + '. -' + a[pos+1:]
a
mi dönüyor ?
'. -'
çıktıda tersine dönüyor .
replace_right
çok daha hoş)