我无法弄清楚正则表达式如何解释模式 \\\\mac\\\\
。它出现在python中 \\mac\\
。
然而,我徘徊为什么python中的re模块不能将模式连续解释为 \mac\
,因为它在单词 {{1}之前和之后都有双反斜杠 mac
。
这是否意味着只进行一次转义并且不会转义已转义的字符串。有人可以帮助我吗?
答案 0 :(得分:2)
使用regexp字符串文字(前缀为r
)来表示这样的怪物:
r'\\\\mac\\\\'
然后你所有的角色都保持原样。
>>> print r'\\\\mac\\\\'
\\\\mac\\\\
如果你想要一个正则表达式匹配这样的怪物,你将需要逃避每个特殊角色:
>>> import re
>>> re.match(, r'\\\\mac\\\\')
<_sre.SRE_Match object at 0x7febff89d850>
如果发生多个解释步骤,则引用和转义通常会遇到难以理解的情况。在这种情况下,regexp函数match
解释给定的字符串(\\\\\\\\mac\\\\\\\\
)。由于反斜杠在regexp语言中具有特殊含义作为转义字符,因此必须转义逐字反斜杠(再次使用反斜杠)。所以每个反斜杠加倍。这就是为什么你需要八个字面反斜杠来表示四个逐字反斜杠。如果你不使用r
表示法作为字符串文字的前缀,那么你必须加倍每个反斜杠,因为字符串解析器已经解释了字符串文字中没有r
前缀的反斜杠,i。 E:
r'\\\\\\\\mac\\\\\\\\' == '\\\\\\\\\\\\\\\\mac\\\\\\\\\\\\\\\\'
这就是我称之为“怪物”的原因。