Обычно все, что вы передаете через параметр -p
в unittest
, обрабатывается с помощью TestLoader::_match_path()
метода , который затем вызывает цепочку функций fnmatch()
→ fnmatchcase()
→ _compile_pattern()
→ translate()
из fnmatch
библиотека .
Функция translate()
переводит ваш исходный аргумент -p
в регулярное выражение, которое затем используется для сопоставления имен.
Документы для функции fnmatch()
утверждают это:
Patterns are Unix shell style:
* matches everything
? matches any single character
[seq] matches any character in seq
[!seq] matches any char not in seq
Из того, что я вижу, это степень того, что она может сделать. Все остальные символы экранированы, чтобы их можно было буквально сопоставить .
Пример: Я передал регулярное выражение a|b
в качестве шаблона. Функция translate()
возвращает окончательное регулярное выражение в виде (?s:p\|m)\Z
. Там символ канала стал экранированным .
Если вам очень интересно, go см. fnmatch
lib * translate()
function здесь - если вы хотите знать точный процесс перевода ваших "глобальных" шаблонов в окончательное регулярное выражение.