Python regexp \ w

时间:2017-08-16 09:48:21

标签: python regex

Python manual州:

  

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。

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。