使用Python从html标记解析JSON

使用Python从html标记解析JSON,python,regex,json,python-2.7,Python,Regex,Json,Python 2.7,我使用BeautifulSoup从HTML页面获取以下代码片段。我很难剥离JSON(在FB_数据之后)。我猜我需要使用re.search,但我在正则表达式方面遇到了问题 该片段是: <script type="text/javascript"> var FB_DATA = { "foo": bar, "two": { "foo": bar, }}; var FB_PUSH = []; var

我使用BeautifulSoup从HTML页面获取以下代码片段。我很难剥离JSON(在FB_数据之后)。我猜我需要使用re.search,但我在正则表达式方面遇到了问题

该片段是:

<script type="text/javascript">
    var FB_DATA = {
        "foo": bar,
        "two": {
          "foo": bar,
        }};
    var FB_PUSH = []; 
    var FB_PULL = []; 
</script>

变量FB_数据={
“福”:酒吧,
“二”:{
“福”:酒吧,
}};
var FB_PUSH=[];
var FB_PULL=[];

我假设您的主要问题是在
与新行以外的任何内容匹配时使用
*?
。使用
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中


我假设您的主要问题是在
与新行以外的任何内容匹配时使用
*?
。使用
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中

FB_DATA = (\{[^;]*;)
看看哪种情况是不够的。

FB_DATA = (\{[^;]*;)

看看在哪种情况下这还不够。

到目前为止,你对正则表达式有什么看法?老实说,我甚至不知道从哪里开始。我讨厌发帖的时候没什么可讲的,但我只是在学习,我对regex不太在行。到目前为止,你对regex有什么看法?老实说,我甚至不知道从哪里开始。我讨厌发帖时没什么可讲的,但我只是在学习,我对正则表达式不太在行。是的,很高兴它有帮助:)是的,很高兴它有帮助:)