私はbashコードをPythonコードに変換しています。pythonのreモジュールで文字列の最後から最短一致パターンを削除する方法は?
今、私はbashで$ {variable%pattern}と同じ機能を持つ関数を作りたいと思います。これは、文字列の末尾から例えば
を最短一致パターンを削除し、私は期待delete_tail(「_ usr_home_you_file.ext.tar.oz」、R「」)結果 『_usr_home_you_file.ext.tar』
で私はしかし、それは次のような最長マッチしたパターンを削除し、以下の
import re
def delete_tail(word,pattern):
return re.sub('{0}.*?$'.format(pattern), '', word)
をPythonの関数を作りました。
word='_usr_home_you_file.ext.tar.oz'
delete_shortest_match_tail=delete_tail(word,r'\.')
print("word = {0}".format(word))
print("delete_shortest_match_tail = {0}". format(delete_shortest_match_tail))
出力:
delete_shortest_match_tail = _usr_home_you_file
は、どのように私は上記の予想通り、文字列の末尾から最短マッチしたパターンを削除機能を作ることができますか?
ありがとうございました。
を解決する方法を私に教えてくれてありがとう問題。出来た。 2つの質問をお願いします。 (1)それは必要ですか? "。*?$"にあります。どちらの場合でも、「?」の有無にかかわらず私の場合と同じように動作します。 (2)len(m.groups())> 0をチェックする必要がある理由を理解できませんでした。mがNoneでないことがチェックされると思います。どうもありがとうございました。 – mora
@moraあなたは正しいです、両方とも冗長であり、削除することができます。私は答えを編集しました。私はまた、グループ0の条件と検索を簡略化しました。 –
もう一度素晴らしいソリューションに感謝します。 – mora