Регулярное выражение для соответствия началу имени файла и расширению имени файла.

Что такое регулярное выражение для соответствия строкам (в данном случае, именам файлов), которые начинаются с "Выполнить" и имеют расширение имени файла .py?

Регулярное выражение должно соответствовать любому из следующих элементов:

RunFoo.py
RunBar.py
Run42.py

Он не должен совпадать:

myRunFoo.py
RunBar.py1
Run42.txt

SQL-эквивалент того, что я ищу, ... LIKE 'Run%.py' ....

Ответы

Ответ 1

Для регулярного выражения вы должны использовать:

re.match(r'Run.*\.py$')

Краткое объяснение:

  • . означает соответствие любому символу.
  • * означает соответствие любому повторению предыдущего символа (следовательно. * означает любую последовательность символов)
  • \- это escape, чтобы избежать явной точки
  • $указывает "конец строки", поэтому мы не сопоставляем "Run_foo.py.txt"

Однако для этой задачи вам, вероятно, лучше использовать простые строковые методы. то есть.

filename.startswith("Run") and filename.endswith(".py")

Примечание: если вы хотите нечувствительность к регистру (то есть соответствие "run.PY", а также "Run.py", используйте параметр re.I для регулярного выражения или конвертируйте в конкретный случай (например, filename.lower()) перед использованием строковых методов.

Ответ 2

Внимание:

  • Ответ на jobscry ( "^ Run.?. py $" ) неверен (например, не соответствует "Run123.py" ).
  • orlandu63 answer ( "/^Run[\w]*?.py$/" ) не будет соответствовать "RunFoo.Bar.py".

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

Ответ 3

Я действительно не понимаю, почему вы решили использовать регулярное выражение для решения этой "проблемы". Вы только что нашли способ найти все .py файлы, которые начинаются с "Run". Итак, это простое решение, которое будет работать, не прибегая к компиляции регулярного выражения:

import os
for filename in os.listdir(dirname):
    root, ext = os.path.splitext(filename)
    if root.startswith('Run') and ext == '.py':
        print filename

Ответ 4

/^Run.*\.py$/

Или, в частности, в python:

import re
re.match(r"^Run.*\.py$", stringtocheck)

Это будет соответствовать "Runfoobar.py", но не "runfoobar.PY". Чтобы сделать его регистрозависимым, вместо этого используйте:

re.match(r"^Run.*\.py$", stringtocheck, re.I)

Ответ 5

Вам не нужно регулярное выражение, вы можете использовать glob, который принимает подстановочные знаки, например. Запуск *.py

Например, чтобы получить эти файлы в вашем текущем каталоге...

import os, glob
files = glob.glob( "".join([ os.getcwd(), "\\Run*.py"]) )

Ответ 6

Если вы напишете несколько более сложное регулярное выражение, вы можете получить дополнительную функцию: извлеките бит между "Run" и ".py":

>>> import re
>>> regex = '^Run(?P<name>.*)\.py$'
>>> m = re.match(regex, 'RunFoo.py')
>>> m.group('name')
'Foo'

(дополнительный бит - это скобки и все между ними, кроме ". *", что и в ответе Роба Ховарда)

Ответ 7

Это, вероятно, не полностью соответствует стандартам именования файлов, но здесь он идет:

/^Run[\w]*?\.py$/

Ответ 8

mabye:

^Run.*\.py$

просто попробуйте