Регулярное выражение для соответствия началу имени файла и расширению имени файла.
Что такое регулярное выражение для соответствия строкам (в данном случае, именам файлов), которые начинаются с "Выполнить" и имеют расширение имени файла .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$
просто попробуйте