python 正则表达式中反斜杠的用法

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 的反斜杠,而第十四行中[]开头的‘\\\’却不可以,只有写成‘\\\\’才可以? 反斜杠在[]中的书写需要遵守什么规律?

阅读 5.1k
1 个回答

首先,python的字符串会将\和其后面的一个字符合并为一个字符,通常用于表示一些不可见字符,如\n代表回车,\0代表ascii码为0的字符,而\\只代表\。这个过程称为 转义 (escaping)。如果用有r前缀的原生字符串(raw string)则不会转义,如r'\\'代表两个\。如果\后的字符不在转义字符表中,则不做转义。

参见: https://docs.python.org/2.0/ref/strings.html

对照一下转义字符表,把你所写的字符串都“翻译”一下,你应该就明白发生了什么。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进