unc = r'\\foo\bar'
string1 = r'\\foo\bar'
string2 = r'\\\\foo\\bar'
if unc == string1:
print "I wish to make a complaint"
if re.match(string1, unc):
print "Ello miss"
if re.match(string2, unc):
print "Sorry I have a cold"
输出是:
I wish to make a complaint
Sorry I have a cold
似乎re.match操作重新转义了文字字符串,所以“Ello miss”永远不会发生。
任何人都可以解释为什么我必须重新逃避反斜杠,首先将字符串设置为文字?
我想在配置文件中保留一个UNC路径列表,我不想在那里转义字符串。当比较器工作时,有一个正则表达式选项是有用的。
答案 0 :(得分:3)
\
字符是正则表达式中的特殊字符,必须转义为字面意思。因此,要匹配字符串\\foo\bar
,您需要正如您发现的那样使用正则表达式\\\\foo\\bar
。您可以使用函数re.escape
为您创建这样的正则表达式,以包含在更大的表达式中。
>>> re.escape(r'\\foo\bar')
'\\\\\\\\foo\\\\bar' # ouch
答案 1 :(得分:2)