67841


pythonで一番後ろから、一致する文字列を変更したいです。

例えば、

[code]

    example_str = "shesheshesh"
    
[/code]

一番後ろがshだった場合XYZにしたいです。（なのでsheshesheshe）の場合変更はしない。

[code]

    "sheshesheXYZ"
    
[/code]

repalceを使うと、shすべてがshになってしまいますし、オプショナルの第三引数に数字を渡しても頭からの何個めまでかという指定しかできないのでどうしようか悩んでいます。


CC BY-SA 4.0
2020-06-20T15:22:15.857
67840
2020-06-21T09:45:39.203
36091
question
python python3
pythonで一番後ろから、一致する文字列を変更したいです。


そうした固定のパターンならば、スライスが使えるでしょう。  
こんな風になります。

[code]

    if example_str[-2:] == "sh":
        example_str = example_str[:-2] + "XYZ"
    
[/code]

もう少し汎用性を持たせるなら、こんな感じで`search_str`と`replace_str`を(かつ`example_str`も)パラメータにした関数を作るとかすれば良いでしょう。

[code]

    search_str = "sh"
    replace_str = "XYZ"
    
    search_len = -(len(search_str))
    if example_str[search_len:] == search_str:
        example_str = example_str[:search_len] + replace_str
    
[/code]


CC BY-SA 4.0
2020-06-20T15:48:15.440
67841
2020-06-20T15:59:30.193
2020-06-20T15:59:30.193
26370
26370
67840
answer


文字列は
[`endswith`](https://docs.python.org/ja/3/library/stdtypes.html#str.endswith)
で接尾辞の一致を確かめられるので、これを使うと簡潔そうです。

[code]

    example_str = "sheshesheshesh"
    suffix = "sh"
    new_suffix = "XYZ"
    
    if example_str.endswith(suffix):
        example_str = example_str[:-len(suffix)] + new_suffix
    
[/code]


CC BY-SA 4.0
2020-06-21T09:45:39.203
67863
2020-06-21T09:45:39.203
19110
67840
answer