In [3]: b =r'123242343.52353543\43534234'
In [4]: b
Out[4]: '123242343.52353543\\43534234'
In [5]: import re
In [6]: p = re.compile('[0-9\.]+')
In [7]: p.findall(b)
Out[7]: ['123242343.52353543', '43534234']
In [8]: p = re.compile('[0-9\\.]+')
In [9]: p.findall(b)
Out[9]: ['123242343.52353543', '43534234']
In [10]: p = re.compile('[0-9\\\.]+')
In [11]: p.findall(b)
Out[11]: ['123242343.52353543\\43534234']
In [12]: p = re.compile('[\\0-9\.]+')
In [13]: p.findall(b)
Out[13]: ['123242343.52353543', '43534234']
In [14]: p = re.compile('[\\\0-9.]+')
In [15]: p.findall(b)
Out[15]: ['123242343.52353543', '43534234']
In [16]: p = re.compile('[\\0-9.]+')
In [17]: p.findall(b)
Out[17]: ['123242343.52353543', '43534234']
In [18]: p = re.compile('[\0-9.]+')
In [19]: p.findall(b)
Out[19]: ['123242343.52353543', '43534234']
In [20]: p = re.compile('[\\\\0-9.]+')
In [21]: p.findall(b)
Out[21]: ['123242343.52353543\\43534234']
In [24]: p = re.compile('[0-9.\\]+')
error: unexpected end of regular expression
In [24]: p = re.compile('[0-9.\]+')
error: unexpected end of regular expression
In [26]: p = re.compile('[0-9.\\\]+')
In [27]: p = re.compile('[0-9.\\\\]+')
发现反斜杠在方括号内使用,'\\' 并不能代表反斜杠, b 只在第十行的 '\\\' 和 第二十行的 ‘\\\\’正则表达中被正确提取反斜杠,另外,‘\’ 和 ‘\\’ 貌似不可以用于[] 最后,而‘\\\’ 和 ‘\\\\’ 却可以。请问,为什么第十行的‘\\\’可以提取出 b 的反斜杠,而第十四行中[]开头的‘\\\’却不可以,只有写成‘\\\\’才可以? 反斜杠在[]中的书写需要遵守什么规律?
首先,python的字符串会将\和其后面的一个字符合并为一个字符,通常用于表示一些不可见字符,如\n代表回车,\0代表ascii码为0的字符,而\\只代表\。这个过程称为 转义 (escaping)。如果用有r前缀的原生字符串(raw string)则不会转义,如r'\\'代表两个\。如果\后的字符不在转义字符表中,则不做转义。
参见: https://docs.python.org/2.0/ref/strings.html
对照一下转义字符表,把你所写的字符串都“翻译”一下,你应该就明白发生了什么。