8位(字节)模式的特殊序列\ w匹配字符 在ASCII字符集中考虑字母数字;这相当于 [A-ZA-Z0-9 _]。
现在比较:
re.search(r"([\w]+)", 'München').group(1)
使用:
re.search(r"([a-zA-Z0-9_]+)", 'München').group(1)
第一个声明输出整个城市名称München,第二个只输出第一个字母M
。字母ü
是单字节,代码点为0xFC
= 252
(Latin-1)。
我的问题是:假设Python手册是正确的,我如何使用Python-3手册中的语句来协调[\w]+
和[a-zA-Z0-9_]+
之间输出的差异?我使用IDLE v.3.6.2。
答案 0 :(得分:0)
您引用了错误的手册(python 3.1的手册)。
正确的是https://docs.python.org/3/library/re.html
如果您希望\w
像[{1}}一样工作,则应使用标记[a-zA-Z0-9_]
:
re.ASCII
答案 1 :(得分:-2)
我不确定您引用的是什么来源,但是您的链接说明了:
对于Unicode(str)模式:
匹配Unicode字符;这包括大多数可以成为任何语言单词的一部分的字符,以及数字和下划线。如果使用ASCII标志,则仅匹配[a-zA-Z0-9_](但该标志会影响整个正则表达式,因此在这种情况下使用显式[a-zA-Z0-9_]可能是更好的选择)。
对于8位(字节)模式:
匹配ASCII字符集中被认为是字母数字的字符;这相当于[a-zA-Z0-9 _]。
我仍然主要使用Python 2,但Python 3中的一个重大变化是默认情况下所有字符串都是Unicode。 Python会在读取文本时将其转换为Unicode。