2017-08-17 25 views
0

私はbashコードをPythonコードに変換しています。pythonのreモジュールで最短一致パターンを削除するには?

今、私は同じ機能を持つ関数を作りたいと思います。$ {variable#pattern}の はbashにあります。これは最短のマッチしたパターンを削除し、

は、例えば、私が期待delete_head( '_ usr_home_you_file.ext.tar.oz'、R '_ * _')結果 'home_you_file.ext.tar.oz'

で私は以下のようなPython関数を作った。

import re 

def delete_head(word,pattern): 
    re.sub('^{0}'.format(pattern), '', word) 

しかし、以下のような最長一致パターンを削除する。

word='_usr_home_you_file.ext.tar.oz' 
delete_shortest_match=delete_head(word,r'_.*_') 
print("word = {0}".format(word)) 
print("delete_shortest_match = {0}". format(delete_shortest_match)) 

出力:私は上記の予想通り

word = _usr_home_you_file.ext.tar.oz 
delete_shortest_match = file.ext.tar.oz # I expected home_you_file.ext.tar.oz 

にはどうすれば最短マッチしたパターンを削除機能を作ることができますか?

ありがとうございました。

答えて

1

bash接頭辞は正規表現ではなく、グロブパターンマッチングルールに従います。正規表現で最短一致が怠惰でachivedすることができ

r'_.*?_' 

かそうでない場合は、サポートまたは最短マッチを取得するには

r'_[^_]*_' 
1

バックトラックを避けるために(正規表現はデフォルトで貪欲されている)、?非を追加貪欲な修飾子を*と一致する0以上の数量子:_.*?_に変更します。

関連する問題