Почему `.` в регулярном выражении PEP 0263?

В PEP 0263 формат для определения кодировки файла Python определяется как :

coding[:=]\s*([-\w.]+)

Почему в регулярном выражении есть . или, наоборот, почему есть - и \w? Насколько я понимаю, . соответствует любому символу, кроме новой строки, поэтому либо [-\w], либо [.] будут соответствовать допустимым именам, состоящим из буквенно-цифровых символов и дефиса.

По какой причине -\w и . указываются вместе в [-\w.]?


person dotancohen    schedule 23.04.2014    source источник
comment
Проверьте ссылку, там есть ссылка на [.]:literal dot character   -  person HamZa    schedule 23.04.2014
comment
@HamZa: Спасибо, это именно то, что мне было нужно!   -  person dotancohen    schedule 23.04.2014


Ответы (1)


Когда вы используете . и - в классах символов, они оба ведут себя по-разному. В классах символов . не имеет специального значения и будет рассматриваться только как точка, тогда как - может использоваться для указания диапазонов, таких как a-zA-Z0-9.

Поскольку в данном случае мы не используем - для представления диапазона, . и - будут соответствовать только самим себе. Особого значения они иметь не будут.

Также обратите внимание, что \w можно определить как [a-zA-Z0-9_]. Он соответствует только символу подчеркивания (_), а не тире (-).

Цитата из документации Python RegEx,

\w

Если флаги LOCALE и UNICODE не указаны, соответствует любому буквенно-цифровому символу и символу подчеркивания; это эквивалентно набору [a-zA-Z0-9_]. С LOCALE он будет соответствовать набору [0-9_] плюс любые символы, определенные как буквенно-цифровые для текущей локали. Если установлено UNICODE, это будет соответствовать символам [0-9_] плюс все, что классифицируется как буквенно-цифровое в базе данных свойств символов Unicode.

person thefourtheye    schedule 23.04.2014
comment
Спасибо, я не понял, что . соответствует только буквальному . в этом контексте. - person dotancohen; 23.04.2014