使用Regex时出现不平衡的括号错误

时间:2014-08-03 19:56:45

标签: python regex json scrapy

我正在使用以下正则表达式从网站获取以下字符模式中包含的Javascript数据源的所有数据

[[]]);

我使用的代码是:

regex = r'\[\[.*?\]]);'
        match2 = re.findall(regex, response.body, re.S)
        print match2

这会抛出错误消息:

    raise error, v # invalid expression
sre_constants.error: unbalanced parenthesis

我认为我可以相当安全地假设这是由我的正则表达式中的结束括号引起的。如何定义我想要的正则表达式而不会出现此错误?

由于

3 个答案:

答案 0 :(得分:3)

你也需要逃避最后几个括号字符。

regex = r'\[\[.*?\]\]\);'
                   ^ ^

如果您尝试获取方括号之间的内容,请在此处使用捕获组。

>>> import re
>>> s = 'foo [[bar]]); baz [[quz]]); not [[foobar]]'
>>> matches = re.findall(r'\[\[(.*?)\]\]\);', s, re.S)
>>> matches
['bar', 'quz']

答案 1 :(得分:1)

转义上一个)] r'\[\[.*?\]\]\)

答案 2 :(得分:1)

你的正则表达式应该是,

regex = r'\[\[.*?\]\]\);'

它会将文字[[符号和以下字符与下一个]]);符号相匹配。

<强>解释

  • \[\[匹配文字[[符号。
  • .*?匹配任何字符零次或多次。 ? *迫使正则表达式引擎执行最短(非贪婪)匹配。{/ li>
  • \]\]\);匹配文字]]);符号。