在Python中使用多行正则表达式?

时间:2012-12-22 04:01:30

标签: python regex json python-2.7

我在Python中使用正则表达式来搜索页面源,并在javascript中查找所有json信息。具体来说,一个例子看起来像这样:

var fooData = {
    id: 123456789,
    name : "foo bar",
    country_name: "foo",
    country_is_eu: null,
    foo_bars: null,
    foo_email: null,
    foo_rate: 1.0,
    foo_id: 0987654321
};

我很了解所有关于正则表达式的知识,而且我不确定我所做的是否正确。我可以得到一些单独的行,但我不完全确定如何使用re.MULTILINE。这是我现在的代码:

prog = re.compile('[var ]?\w+ ?= ?{[^.*]+\n};', re.MULTILINE)
vars = prog.findall(text)

为什么这不起作用?

为了更清楚,我真的需要它来匹配这些括号之间的所有内容,如下所示:

var fooData = {

};

所以,基本上我找不到匹配每一行的方法,除了看起来像这样的一行:

};

3 个答案:

答案 0 :(得分:2)

您正在寻找的不包括括号:

(?<=var fooData = {)[^}]+(?=};)

答案 1 :(得分:0)

如果您不确定,请务必查阅文档(这对Python非常有用)。

multi-line mode生成以插入符号(^)开头并以($)结尾的正则表达式,以匹配每个相应行的开头和结尾(其中“行”是紧跟在换行符之后的任何内容{ {1}})。

看起来你已经在你的正则表达式的开头和结尾都有\n s并且你正在使用\n函数来解决这个问题。

答案 2 :(得分:0)

我明白了!事实证明甚至不需要多线模式,我只是将所有未在;中结束的行匹配在括号之间。我还略微修改了正则表达式以找到括号等,这是我的代码:

re.findall('(?:var )?\w+[ ]?=[ ]?{\n(?:.+(?!(?<=;))\n)+};', text)

感谢X.Jacobs,我简化(并修复了)我的代码:

re.findall('(?:var )?\w+\s*=\s*{[^;]+};', text)