繁体   English   中英

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

[英]Using Multiline Regular Expressions in Python?

我在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 = {

};

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

};

这是你正在寻找的不包括括号:

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

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

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

看起来你已经具有占该\\n在开始和你的正则表达式的S端和您所使用的findall()函数。

我知道了! 原来甚至不需要多线模式,我只匹配所有没有结束的线路; 在括号之间。 我也稍微修改了正则表达式以找到括号等,这是我的代码:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM