正则表达式中的不平衡括号错误

3 投票
3 回答
33896 浏览
提问于 2025-04-18 15:51

我正在使用以下正则表达式,从一个网站的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']

撰写回答