[英]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.