我已经使用BeautifulSoup从HTML页面获取以下代码段。我在剥离JSON(FB_DATA之后)时遇到了麻烦。我猜我需要使用re.search,但我在使用REGEX时遇到了麻烦。
该片段是:
<script type="text/javascript">
var FB_DATA = {
"foo": bar,
"two": {
"foo": bar,
}};
var FB_PUSH = [];
var FB_PULL = [];
</script>
答案 0 :(得分:4)
我认为当.*?
匹配除新行之外的任何内容时,您的主要问题是使用.
。使用s
点匹配 - 换行符修饰符,您可以非常简单地完成此操作:
(?s) (?# dot-match-all modifier)
var (?# match var literally)
\s+ (?# match 1+ whitespace)
FB_DATA (?# match FB_DATA literally)
\s* (?# match 0+ whitespace)
= (?# match = literally)
\s* (?# match 0+ whitespace)
( (?# start capture group)
\{ (?# match { literally)
.*? (?# lazily match 0+ characters)
\} (?# match } literally)
) (?# end capture group)
; (?# match ; literally)
您的JSON字符串将位于捕获组#1中。
m = re.search(r"(?s)var\s+FB_DATA\s*=\s*(\{.*?\});", html)
print m.group(1)
答案 1 :(得分:0)
从
开始FB_DATA = (\{[^;]*;)
并查看在哪些情况下还不够。