Нужен regex для проверки имени файла

вид строки - "имя.расширение"

  • Имя не больше 8 символов
  • расширение не больше 3
  • сама строка не больше 20 символов

почему файл a.in.txt выдает как подходящий при таком шаблоне: ^(([A-Za-z]){1,9}\.([A-Za-z]){1,4}){,21}$


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Шаблон ^([A-Za-z]{1,9}\.[A-Za-z]{1,4}){,21}$ (лишние подмаски удалены) находит совпадение в строках, которые целиком состоят из 0-21 повторов 1-9 букв, точки и 1-4 букв. См. пример работы своего выражения.

Используйте

^[A-Za-z]{1,8}\.[A-Za-z]{1,3}$

См. пример работы выражения.

Подробности

  • ^ - начало строки
  • [A-Za-z]{1,8} - от одной до восьми букв ASCII
  • \. - символ точки
  • [A-Za-z]{1,3} - от одной до трёх букв ASCII
  • $ - конец строки.

Пример на Python:

import re
filenames = ['in.txt','abcdEFGHI.htm']
for filename in filenames:
    print(filename, bool(re.search(r'^[A-Za-z]{1,8}\.[A-Za-z]{1,3}$', filename)), sep = ' => ')

Результат:

in.txt => True
abcdEFGHI.htm => False
→ Ссылка