更新1:Python 3.3.3 re.compile('e')和re.compile(' e')发生了什么?
>>> '\e'
'\\e'
以上情况说明,Python的文本分析器对待'\e'
两个文字\
和e
。我对吗?如果是这样, re.compile('\e')
也应遵循此规则第一。即它应该匹配两个文字\
和e
。像这样:
>>> re.findall('\e','\e\e')
['\e', '\e']
如果我错了,为什么?
原题:
为了方便我用RER指示蟒蛇标准库re模块的机制。
我已经阅读了python doc中的相关文章。我知道警告“强烈建议您为所有人使用原始字符串,但最简单的表达方式”。但我只想知道如果我不使用原始字符串,re.compile将如何工作。只需看一看:
>>> A=re.compile('\e')
>>> B=re.compile('e')
>>> A==B
False
>>> re.findall(A,'eee')
['e', 'e', 'e']
>>> re.findall(B,'eee')
['e', 'e', 'e']
正如您所看到的,A和B在执行搜索时没有什么不同。然后:
为什么'\ e'可以匹配字符串字面值'e'?
你能找到一个会产生差异的字符串文字吗?
的另一个问题是,为什么re.compile('\\')
会引发错误。请注意,这是一个关于re机制的问题,而不是如何编写re源代码。因为我觉得:
显然\\
意味着一个反斜杠,RER为什么不知道?为什么我们需要一个模式\\\\
来匹配文字反斜杠?看看这个:
>>> re.findall('\n','\n')
['\n']
完美的作品。但是,如果将n
更改为\
,则会引发错误。这对我来说很难理解。
会发生什么,如果快线RER允许\\
匹配一个反斜杠?它是不是像重新存在的基础?如果是这样,你能举个例子吗?
在此先感谢。它让我困惑很久。
我知道规则'当你在你的代码中说'\'时,你实际上在正则表达式中说'\'。我不知道为什么我们不能说'当你在代码中说'\'时,你也会在正则表达式中说\'。 – tcpiper
@Pythoner'\\'实际上是在python代码中转义'\'。所以,我们实际上是将'\'传递给正则表达式。 – thefourtheye