你会被字符串和字符串文字之间的区别搞糊涂。

字符串文字是放在"或'之间的文字,python解释器解析该字符串并将其放入内存。如果您将字符串文本标记为原始字符串文本(使用r'),那么python解释器在将字符串放入内存之前不会更改该字符串的表示形式,但是一旦对它们进行了解析,它们的存储方式就完全相同。

这意味着在内存中没有原始字符串。以下两个字符串都以相同的方式存储在内存中,不知道它们是否是原始字符串。r'a regex digit: \d' # a regex digit: \d

'a regex digit: \\d' # a regex digit: \d

这两个字符串都包含\d,没有什么可以说这来自原始字符串。因此,当您将这个字符串传递给re模块时,它会看到有一个\d,并将其视为一个数字,因为re模块不知道字符串来自原始字符串文本。

在您的特定示例中,要获取后跟文字d的文字反斜杠,您可以使用\\d,如下所示:import re

text2 = 'Today is 11/27/2012. PyCon starts 3/13/2013.'

text2_re = re.sub(r'(\\d+)/(\\d+)/(\\d+)', r'\3-\1-\2', text2)

print (text2_re) #output: Today is 11/27/2012. PyCon starts 3/13/2013.

或者,不使用原始字符串:import re

text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'

text_re = re.sub('(\\d+)/(\\d+)/(\\d+)', '\\3-\\1-\\2', text2)

print (text_re) #output: Today is 2012-11-27. PyCon starts 2013-3-13.

text2 = 'Today is 11/27/2012. PyCon starts 3/13/2013.'

text2_re = re.sub('(\\\\d+)/(\\\\d+)/(\\\\d+)', '\\3-\\1-\\2', text2)

print (text2_re) #output: Today is 11/27/2012. PyCon starts 3/13/2013.

我希望这能有所帮助。

编辑:我不想让事情复杂化,但因为\d不是有效的转义序列,所以python不会更改它,所以'\d' == r'\d'是真的。因为\\是一个有效的转义序列,所以它被更改为\,所以您得到行为'\d' == '\\d' == r'\d'。弦有时会混淆。

Edit2:要回答您的编辑,让我们具体地看一下每一行:text2_re = re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text2)

re.sub接收两个字符串(\d+)/(\d+)/(\d+)和\3-\1-\2。希望现在的表现和你预期的一样。text2_re1 = re.sub('(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text2)

再次(因为\d不是有效的字符串转义,所以它不会被更改,请参阅我的第一次编辑)re.sub接收两个字符串(\d+)/(\d+)/(\d+)和\3-\1-\2。因为python解释器不会改变\d。如果你理解我的第一次编辑,那么希望你应该理解为什么这两个案例表现相同。text2_re2 = re.sub(r'(\d+)/(\d+)/(\d+)', '\3-\1-\2', text2)

这种情况有点不同,因为\1、\2和\3都是有效的转义序列,它们被unicode character替换,后者的十进制表示由数字给定。这很复杂,但基本上可以归结为:\1 # stands for the ascii start-of-heading character

\2 # stands for the ascii start-of-text character

\3 # stands for the ascii end-of-text character

这意味着re.sub像前两个示例((\d+)/(\d+)/(\d+))那样接收第一个字符串,但第二个字符串实际上是//。所以re.sub用第二个字符串完全替换匹配,但是由于这三个(\1、\2或\3)都不是可打印字符,python只打印一个股票持有人字符。text2_re3 = re.sub('(\d+)/(\d+)/(\d+)', '\3-\1-\2', text2)

其行为类似于第三个示例,因为r'(\d+)/(\d+)/(\d+)' == '(\d+)/(\d+)/(\d+)',如第二个示例中所述。