简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM