Как я могу перевести следующее имя файла в регулярное выражение в Python?

Теперь я подражаю регулярным выражениям по мере ввода.

Я хотел бы определить шаблон для следующего файла примера: b410cv11_test.ext . Я хочу, чтобы иметь возможность выполнять поиск файлов, которые соответствуют шаблону примерного файла, упомянутого выше. С чего начать (так потеряно и запутано), и каков наилучший способ найти решение, которое наилучшим образом соответствует шаблону файла? Заранее спасибо.

Дальнейшее уточнение вопроса:

Я хотел бы, чтобы шаблон выглядел следующим образом: должен начинаться с буквы «b», затем следуют три цифры, а затем «cv», а затем две цифры, затем символ подчеркивания, а затем «release», за которым следует.'ext '

6 Solutions collect form web for “Как я могу перевести следующее имя файла в регулярное выражение в Python?”

Теперь, когда у вас есть удобное для чтения описание имени файла, довольно просто перевести его в регулярное выражение (по крайней мере, в этом случае;)

должен начинаться с

Каретка ( ^ ) привязывает регулярное выражение к началу того, что вы хотите совместить, поэтому ваш повтор должен начинаться с этого символа.

«Б»,

Любой неспециальный символ в вашем re будет соответствовать буквально, поэтому вы просто используете «b» для этой части: ^b .

а затем […] цифры,

Это немного зависит от того, какой вкус вы используете:

Самый общий способ выразить это – использовать скобки ( [] ). Они означают «соответствовать любому из символов, перечисленных внутри. [ASDF] например, будет соответствовать либо A либо S или D или F , [0-9] будет соответствовать [ASDF] от 0 до 9.

Вероятно, в вашей библиотеке есть ярлык для «любой цифры». В sed и awk вы можете использовать [[:digit:]] [sic!], На python и на многих других языках вы можете использовать \d .

Итак, теперь вы читаете ^b\d .

а затем три […]

Самый простой способ выразить это – просто повторить атом три раза: \d\d\d .

Снова ваш язык может предоставить ярлык: фигурные скобки ( {} ). Иногда вам придется избегать их с обратной косой чертой (если вы используете sed или awk, читайте о «расширенных регулярных выражениях»). Они также дают вам возможность сказать «по крайней мере x, но не более, чем у предыдущих атомов»: {x,y} .

Теперь у вас есть: ^b\d{3}

а затем 'cv',

Буквальное соответствие снова, теперь мы имеем ^b\d{3}cv

а затем две цифры,

Мы уже рассмотрели это: ^b\d{3}cv\d{2} .

затем подчеркивание, затем «релиз», за которым следует .'ext '

Опять же, это должно соответствовать буквально, но точка ( . ) Является особым символом. Это означает, что вам нужно избежать этого с помощью обратной косой черты: ^\d{3}cv\d{2}_release\.ext

Если оставить обратную косую черту, это означает, что имя файла, например «b410cv11_test_ext», также будет соответствовать, что может или не может быть проблемой для вас.

Наконец, если вы хотите гарантировать, что больше ничего не следует за «.ext», закрепите re до конца вещи, чтобы соответствовать, используйте знак доллара ( $ ).

Таким образом, полное регулярное выражение для вашей конкретной проблемы будет:

 ^b\d{3}cv\d{2}_release\.ext$ 

Легко.

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

Чтобы избежать путаницы, прочтите следующее.

Во-первых, у вас есть модуль glob , который обрабатывает регулярные выражения имени файла так же, как оболочки Windows и Unix.

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

В-третьих, у вас есть модуль re , который является полным набором регулярных выражений.

Затем задайте другой, более конкретный вопрос.

Я хотел бы, чтобы шаблон выглядел следующим образом: должен начинаться с буквы «b», затем следуют три цифры, а затем «cv», а затем две цифры, затем символ подчеркивания, а затем «release», за которым следует.'ext '

 ^b\d{3}cv\d{2}_release\.ext$ 

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

Кроме того, что вы считаете шаблоном? Разумеется, * (glob) или. * (Regex) будут соответствовать шаблону. Кроме того, _test.ext (glob) или. Образец _test.ext (regexp) будет соответствовать, как и многие другие варианты.

Можете ли вы более подробно рассказать о шаблоне? Например, вы можете описать его как «b», затем цифры, а затем cv, а затем цифры … »

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

если буквы несущественны, вы можете попробовать \ w \ d \ d \ d \ w \ w \ d \ d_test.ext, который будет соответствовать шаблону буквы / номера, или b \ d \ d \ dcv \ d \ d_test.ext или некоторые из них.

При работе с регулярными выражениями я нахожу пример регулярного выражения Mochikit очень полезным .

 /^b\d\d\dcv\d\d_test\.ext$/ 

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

  • Как вы используете регулярное выражение в понимании списка в Python?
  • Как использовать регулярное выражение для слов
  • Регулярное выражение для управления экранированными символами для элементов, таких как строковые литералы
  • Исходный паттерн Python соответствует
  • Найти гиперссылки в тексте с помощью Python (связанный с Twitter)
  • Стоит ли использовать python re.compile?
  • Заменить текст в примере HTML и BBCode
  • Какое правильное регулярное выражение подходит для сопоставления значений, генерируемых uuid.uuid4 (). Hex?
  • Python - лучший язык программирования в мире.