2016-09-23 4 views
0

Я пытаюсь извлечь имя файла с помощью regex. Имена файлов находятся в списке files, шаблон, который должен быть сопоставлен songTitle.Python regex не соответствует

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

Используйте 'if re_found:', а не 'if 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 

Кроме того, при написании регулярных выражений литералов, как правило, следует положить «г» до того, как буквальным противном случае вам необходимо, чтобы избежать обратной косой черты.

+0

Все еще не работает. См. Править. –

+0

Проблемы, похоже, связаны с символами, отличными от ascii –

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 
Смежные вопросы