正则表达式中的不平衡括号错误
我正在使用以下正则表达式,从一个网站的JavaScript数据源中获取所有数据,这些数据包含在特定的字符模式中。
[[]]);
我使用的代码是:
regex = r'\[\[.*?\]]);'
match2 = re.findall(regex, response.body, re.S)
print match2
但是这段代码出现了一个错误信息:
raise error, v # invalid expression
sre_constants.error: unbalanced parenthesis
我觉得这个错误很可能是因为我的正则表达式里面有一个闭合括号。请问我该如何定义我想要的正则表达式,才能不出现这个错误呢?
谢谢!
3 个回答
2
在这个表达式中,我们需要对最后一个 )
和 ]
进行转义,也就是说要特别处理这两个符号,以免它们被误解。这里的 r'\[\[.*?\]\]\)
是一个正则表达式,用来匹配特定的内容。
2
你的正则表达式应该是:
regex = r'\[\[.*?\]\]\);'
这个表达式会匹配字面上的 [[
符号,以及后面的字符,直到下一个 ]]);
符号。
解释:
\[\[
匹配字面上的[[
符号。.*?
匹配任意字符,次数可以是零次或多次。?
放在*
后面,强制正则引擎进行最短匹配,也就是不贪心匹配。\]\]\);
匹配字面上的]]);
符号。
6
你还需要对最后的括号进行转义。方括号外面的闭合方括号不需要转义:
regex = r'\[\[.*?]]\);'
^
如果你想获取方括号之间的内容,可以在这里使用一个捕获组。
>>> import re
>>> s = 'foo [[bar]]); baz [[quz]]); not [[foobar]]'
>>> matches = re.findall(r'\[\[(.*?)]]\);', s, re.S)
>>> matches
['bar', 'quz']