2016-11-22 2 views
0

Я делал некоторые чтения по документации glob, но я немного потерял одно. Что меня смущает fnmatch, документация показывает, что он позволяет создавать шаблоны строк для поиска, похожие на re, но с различными обозначениями подстановочных знаков.Как узнать, какой шаблон использовать?

Когда звездочкой в ​​строке являются подстановочные знаки? Когда это не так? Это зависит от того, какие пакеты я импортировал?

Должен ли я импортировать определенные пакеты для определенных целей в отношении строк, или есть какой-то универсальный шаблон?

Я смотрел эту страницу Google Python for Education где говорится, что \w является подстановочным символом для символа слова. Итак, существует более одного шаблона? Или это существует только для регулярных выражений?

+0

подстановочные не регулярных выражений. –

+1

Я не понимаю ваш вопрос. И 'fnmatch', и' re' используют '*' и используются. Вы можете уточнить свой вопрос? См. Https: //docs.python.org/2/library/re.html https://docs.python.org/2/library/fnmatch.html – Fallenreaper

+0

* wildcard - это то же самое, что и '. *'. Когда вы произносите подстановочный знак, это не регулярное выражение. –

ответ

1

Хорошо, я надеюсь, что мой ответ не будет слишком основан на мнениях.

Подстановочные обозначения используются fnmatch и glob для соответствия имени файла. Он имеет некоторое сходство с регулярными выражениями, но он отличается.

wildcards в основном используется для сопоставления имен файлов (например: *.txt, foo-[0-9].bin), простых в использовании и более ограничены.

regular expressions более мощные, могут находить/сочетать/извлекать сложные узоры. Они "излишество", и не удобно, чтобы соответствовать именам файлов по расширению:

примеров:

, чтобы соответствовать всем файлам с расширением .txt:

  • подстановочные: *.txt
  • регулярное выражение: .*\.txt$

соответствует всем именам файлов, начинающимся цифрой:

  • подстановочные: [0-9]*
  • регулярное выражение: ^\d.*

, чтобы соответствовать файлы, начиная с несущей .h или .c расширения:

  • подстановочные: a*.[ch]
  • регулярное выражение: ^a.*\.[ch]$

первый легче понять сильным пользователем, в то время как последний более полезен для сценаристов & программистов (а также позволяет извлекать части, а именно групп из текста).

Вы можете использовать fnmatch в качестве анализатора регулярных выражений бедного человека для текстовой фильтрации в ваших программах, поэтому пользователи, знакомые с шаблонами файлов, будут знать, как использовать ваши настраиваемые фильтры.

подробнее о различиях в этом посте: https://unix.stackexchange.com/questions/57957/how-do-regular-expressions-differ-from-wildcards-used-to-filter-files

+0

Ваша вторая запись для регулярного выражения также содержится в документации 'glob', на которую я смотрел, здесь: [link] (https://docs.python.org/2/library/glob.html) Зачем вам это нужно? быть чем-то вроде '. * \.'? Разве это не означает, что ваша папка имеет расширение в своем имени? – thleo

+1

У меня нет вашего вопроса. Согласование файлов с помощью регулярных выражений невозможно с помощью 'glob'. Вы должны проходить через файлы dir/files и использовать регулярное выражение для каждого. Никакой стандартный модуль не делает этого. –

Смежные вопросы