2017-02-07 4 views
2

フォルダ名と数値(関数が返すシーズンフォルダ)の配列を取得する関数を作成しようとしています。適切なシーズンナンバーで[Staffel =シーズンはドイツ語]ですが、私のフォルダはNamed Staffel ==ドイツのTVショー、シーズンはEng。Regexpはregex101.comを使っていますが、Pythonでは動作していません

フォルダを探して切り抜いたフォルダ(D) イム含まれています。この例では(シーズン| Staffel)それはStaffel 2の前に発生するため、2それはシーズン02を返すべき配列の

def findFolderbyNumber(path, number): 
    d = getFolders(path) 
    d = ['Staffel 1','Staffel 20','Season 02', 'Staffel 2', 'Season 3'] 
    number = 2 
    for obj in d: 
     pattern = '(.*)(Staffel|Season)((\s?)*)((0?)*)('+str(number)+')(\D)(.*)' 
     m = re.match(pattern, obj) 
     print(obj, end='\tMatch = ') 
     print(m) 
     if(m): 
      return obj 
    return 0 


Staffel 1 Match = None 
Staffel 20 Match = None 
Season 02 Match = None 
Staffel 2 Match = None 
Season 3 Match = None 
+1

'\ D'は非数字文字と一致します。あなたのサンプルのどれも2の後ろに数字以外の文字が続きません。 – glibdud

+1

それはStaffel 20を返さずに、どうすれば修正できますか?私は\ Dがそのトリックをすると思った:D –

+1

あなたは単語境界( '\ b')がほしいと思うように聞こえる。 – glibdud

答えて

2

あなたのことが必要最後の\D(?!\d)に置き換えてください。

あなたのテストでは、複数行の文字列入力を使用し、コードでは2の後に数字のない個々の文字列をテストします。 \Dは消費パターンであり、数字以外の文字が含まれていなければならず、(?!\d)は負の先読みであり、次の文字を数字にすることはできません。

別の解決策は、ワード境界\bで最後\Dを交換することですが、あなたは(すなわちr'pattern'を使用)エスケープの問題を回避するために、リテラル生の文字列を使用する必要があります。

関連する問題