为啥在 PEP 0263 正则表达式中使用 `.`?

Posted

技术标签:

【中文标题】为啥在 PEP 0263 正则表达式中使用 `.`?【英文标题】:Why `.` in PEP 0263 regex?为什么在 PEP 0263 正则表达式中使用 `.`? 【发布时间】:2014-06-08 00:11:47 【问题描述】:

在PEP 0263中定义Python文件编码的格式定义为:

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

为什么在正则表达式中有.,或者,为什么有-\w?据我了解,. 匹配除换行符以外的任何字符,因此[-\w][.] 将匹配由字母数字字符和破折号组成的合法名称。 p>

[-\w.] 中同时指定-\w. 的原因是什么?

【问题讨论】:

. 是not a special character in a character class 查看the reference,有[.]:literal dot character的链接 @HamZa:谢谢,这正是我所需要的! 【参考方案1】:

当您在字符类中使用.- 时,它们的行为会有所不同。在字符类中,. 没有特殊含义,只会被视为点,而- 可用于指定范围,如a-zA-Z0-9

由于在这种情况下我们不使用- 来表示范围,所以.- 将只匹配它们自己。它们不会有特殊含义。

还要注意,\w 可以定义为[a-zA-Z0-9_]。它只匹配下划线字符 (_) 而不是破折号 (-)。

引自Python RegEx documentation,

\w

LOCALEUNICODE标志未指定时,匹配任何字母数字字符和下划线;这相当于集合[a-zA-Z0-9_]。使用LOCALE,它将匹配集合[0-9_] 加上当前语言环境中定义为字母数字的任何字符。如果设置了UNICODE,这将匹配字符[0-9_] 加上Unicode 字符属性数据库中归类为字母数字的任何内容。

【讨论】:

谢谢,我没有意识到. 在这种情况下只匹配文字.

以上是关于为啥在 PEP 0263 正则表达式中使用 `.`?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配符合 PEP440 的版本字符串

为啥在python中通过字符串声明unicode?

PEP 263 -- Defining Python Source Code Encodings(定义Python源代码编码)

为啥在 Python 的正则表达式中使用 'r'? [复制]

python #!/usr/bin/python作用

为啥这个正则表达式在最后一场比赛中有空格?