3

我在 Python 中使用正则表达式来搜索页面源,并在 javascript 中找到所有 json 信息。具体来说,一个示例如下所示:

变量 fooData = {
    编号:123456789,
    名称:“富吧”,
    国家名称:“富”,
    country_is_eu:空,
    foo_bars:空,
    foo_email:空,
    foo_rate: 1.0,
    foo_id: 0987654321
};

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

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

为什么这不起作用?

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

变量 fooData = {

};

所以,基本上我无法找到一种方法来匹配每一行,除了如下所示:

};
4

3 回答 3

2

这就是您要查找的内容,不包括括号:

(?<=var fooData = {)[^}]+(?=};)
于 2012-12-22T05:06:48.920 回答
0

当您不确定时,请始终查阅文档(这对 Python 来说非常好)。

行模式使正则表达式以插入符号 (^) 开头并以 ($) 结尾以匹配每个相应行的开头和结尾(其中“行”是紧跟在换行符之后的任何内容\n)。

看起来您已经通过\n在正则表达式的开头和结尾添加 s 来解决此问题,并且您正在使用该findall()函数。

于 2012-12-22T04:09:26.807 回答
0

我得到了它!结果发现甚至不需要多行模式,我只是匹配;了括号之间所有不以 a 结尾的行。我还稍微修改了正则表达式以查找括号等,这是我的代码:

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

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

re.findall('(?:var )?\w+\s*=\s*{[^;]+};', text)
于 2012-12-22T05:06:34.633 回答