[英]Matching \[\] in Python regexes
I am trying to replace all expressions of the form 我正在尝试替换表格的所有表达式
\[something\]
in a string by 在一个字符串中
\[<img src='something'>\]
Since \\
and [
]
are special characters, I need to espace them (so \\\\
, \\[
and \\]
), thus my code would be 由于\\
和[
]
是特殊字符,因此我需要对它们进行换行(因此\\\\
, \\[
和\\]
),因此我的代码将是
def repl(m):
return "<img src='"+m.group(1)+"'>"
print re.sub("\\\[(.*?)\\\]", repl, "frfrfr\nfrrffr<p>\[something\]</p>frff\nfrfrr", re.S)
However, this returns the original string. 但是,这将返回原始字符串。 Could someone point out my mistake ? 有人可以指出我的错误吗?
Escape \\
correctly, or use r'raw string'
as follow. 正确转义\\
,或按如下方式使用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
UPDATE UPDATE
The fourth parameter of re.sub
is count
, not flags
. re.sub
的第四个参数是count
,而不是flags
。 To specify flags, use keyword arguments. 要指定标志,请使用关键字参数。 Otherwise, re.S
is recognized as count
. 否则,将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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.