2016-09-23 8 views
0

正規表現を使用してファイル名を抽出しようとしています。ファイル名はfilesのリストにあり、一致するパターンはsongTitleです。Pythonの正規表現が一致しない

この例で
files = listdir(curdir) 
     print("Pattern : %s" % songTitle) 
     for songs in files: 
      print(songs) 
      re_found = re.match(re.escape(songTitle) + r'.*\.mp3$', songs) 
      if re_found: 
       FileName = re_found.group() 
       print(FileName) 
       break 

files含ま:

['.DS_Store', '__init__.py', 'command_line.py', "Skrillex & Diplo - 'Mind' feat. Kai (Official Video)-fDrTbLXHKu8.mp3"] 

songTitleを(パターンが一致する):Skrillex & Diplo - 'Mind' feat. Kai (Official Video)

出力:

Pattern : Jack Ü - Take Ü There feat. Kiesza [OFFICIAL VIDEO] 
.DS_Store 
__init__.py 
command_line.py 
Jack Ü - Take Ü There feat. Kiesza [OFFICIAL VIDEO]-C9slkeFXogU.mp3 
Skrillex & Diplo - 'Mind' feat. Kai (Official Video)-fDrTbLXHKu8.mp3 

EDIT:

私はいくつかのテストを実行し、問題が非ASCII文字が原因発生していることに気づきました。この場合の 'Ü'など。

+1

待ちますので、問題は何ですか? – MooingRawr

+0

ええ、ここにバグはありません。彼はそれが一致していないと言うが、それはうまくいくようだ。 – Bharel

+2

're_found:'を使用してください。 'matchなら!= None:' –

答えて

0

実際には正規表現は正常ですが、問題はインデントとif文にあります。これを試してみてください:正規表現リテラルを書くとき

files = listdir(curdir) 
print(files) 
print("Pattern : %s" %songTitle) 
for songs in files: 
    re_found = re.match(re.escape(songTitle) + r'.*\.mp3$', songs) 
    if re_found: 
     FileName = re_found.group() 
     print(FileName) 
     break 

はまた、あなたは一般的にそうでない場合は、あなたがバックスラッシュをエスケープする必要がありますリテラルの前には「r」を置く必要があります。

+0

まだ動作しません。編集を参照してください。 –

+0

問題はアスキー文字ではないようです –

0

これは動作します:

files = listdir(curdir) 
print("Pattern : %s" % songTitle) 
for songs in files: 
    re_found = re.match(re.escape(songTitle) + r'.*\.mp3$', songs) 
    if re_found: 
     FileName = re_found.group() 
     print(FileName) 
     break 
関連する問題