回答:
これでうまくいくはずです
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:]
右から置き換えるには:
def replace_right(source, target, replacement, replacements=None):
return replacement.join(source.rsplit(target, replacements))
使用中で:
>>> replace_right("asd.asd.asd.", ".", ". -", 1)
'asd.asd.asd. -'
replacements=None
好きですが、パラメーターを省略すると関数がエラーになるため、パラメーターを指定するとエラーのように見えます(Python 2.7で試してみました)。私は、デフォルト値を削除するか、-1(無制限の置換)に設定するか、より適切なものにするreplacements=1
(OPが望むものに従って、この特定の関数のデフォルトの動作であると思う)ことをお勧めします。ドキュメントによると、このパラメーターはオプションですが、指定する場合はintでなければなりません。
". -".join("asd.asd.asd.".rsplit(".", 1))
。あなたがしているのは、右側から文字列分割を1回実行し、置換を使用して文字列を再び結合することだけです。
1つのライナーは次のようになります。
str=str[::-1].replace(".",".-",1)[::-1]
.replace
逆転したストリングでやっている。渡された両方の文字列replace
も逆にする必要があります。そうしないと、もう一度文字列を逆にしたときに、挿入したばかりの文字が逆になります。これは、1文字を1文字に置き換える場合にのみ使用できます。さらに、将来誰かが変更する必要があり、単語がsdrawkcabと書かれている理由を知りたくなった場合に備えて、これをコードに含めません。
ナイーブなアプローチ:
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の回答rfind
:
pos = a.rfind('.')
a[:pos] + '. -' + a[pos+1:]
a
ですか?
'. -'
つまり、出力が逆になります。
replace_right
はずっと良いです)