python反斜杠正则表达式的乐趣

时间:2013-04-15 15:41:07

标签: python regex

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路径列表,我不想在那里转义字符串。当比较器工作时,有一个正则表达式选项是有用的。

2 个答案:

答案 0 :(得分:3)

\字符是正则表达式中的特殊字符,必须转义为字面意思。因此,要匹配字符串\\foo\bar,您需要正如您发现的那样使用正则表达式\\\\foo\\bar。您可以使用函数re.escape为您创建这样的正则表达式,以包含在更大的表达式中。

>>> re.escape(r'\\foo\bar')
'\\\\\\\\foo\\\\bar'           # ouch

答案 1 :(得分:2)

在正则表达式模式中,反斜杠的含义,需要显式转义。

因此,\\表示:匹配一个文字\字符。

如果要将文字文本传递给re.match(),则需要先使用re.escape()转义任何可能的元字符。