我正在尝试替换表单的所有表达式
\[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)
但是,这会返回原始字符串。有人可以指出我的错误吗?
答案 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