1
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 路径列表,并且我不想在其中转义字符串。虽然比较器工作,但有一个可用的正则表达式选项会很有用。

4

2 回答 2

3

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

>>> re.escape(r'\\foo\bar')
'\\\\\\\\foo\\\\bar'           # ouch
于 2013-04-15T15:44:34.170 回答
2

在正则表达式模式中,反斜杠也有意义需要显式转义。

因此,\\意味着:匹配一个文字\字符。

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

于 2013-04-15T15:44:27.920 回答