在Python正则表达式中匹配\ [\]

时间:2013-11-05 15:21:27

标签: python regex

我正在尝试替换表单的所有表达式

\[something\]

中的字符串

\[<img src='something'>\]

由于\[ ]是特殊字符,我需要对它们进行展开(所以\\\[\]),因此我的代码将是

def repl(m):
    return "<img src='"+m.group(1)+"'>"

print re.sub("\\\[(.*?)\\\]", repl, "frfrfr\nfrrffr<p>\[something\]</p>frff\nfrfrr", re.S)

但是,这会返回原始字符串。有人可以指出我的错误吗?

1 个答案:

答案 0 :(得分:5)

正确退出\,或使用r'raw string',如下所示。

>>> print re.sub(r"\\\[(.*?)\\\]", repl, "frfrfr\nfrrffr<p>\[something\]</p>frff\nfrfrr", flags=re.S)
frfrfr
frrffr<p><img src='something'></p>frff
frfrr

>>> print re.sub("\\\\\\[(.*?)\\\\\\]", repl, "frfrfr\nfrrffr<p>\[something\]</p>frff\nfrfrr", flags=re.S)
frfrfr
frrffr<p><img src='something'></p>frff
frfrr

<强>更新

re.sub的第四个参数是count,而不是flags。要指定标志,请使用关键字参数。否则,re.S会被识别为count

>>> print re.sub(r"\\\[(.*?)\\\]", repl, "frfrfr\nfrrffr<p>\[something\nblah\]</p>frff\nfrfrr", re.S)
frfrfr
frrffr<p>\[something
blah\]</p>frff
frfrr
>>> print re.sub(r"\\\[(.*?)\\\]", repl, "frfrfr\nfrrffr<p>\[something\nblah\]</p>frff\nfrfrr", flags=re.S)
frfrfr
frrffr<p><img src='something
blah'></p>frff
frfrr