regex 我该如何编写正则表达式来从这个HTML脚本标记中获取JSON?

c86crjj0  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(69)

我从<script>标签中提取了这个文本。

function fbq_w123456as() {
    fbq('track', 'AddToCart', {
        contents: [
            {
                'id': '123456',
                'quantity': '',
                'item_price':69.99
            }
        ],
        content_name: 'Stackoverflow',
        content_category: '',
        content_ids: ['w123456as'],
        content_type: 'product',
        value: 420.69,
        currency: 'USD'
    });
}

字符串
我尝试使用regex提取这些信息,然后使用python将其转换为JSON。我尝试了re.search(r"'AddToCart', (.*?);"和其他一些尝试,但没有运气。我对regex很陌生,我正在努力。

{
    "contents":[
        {
            "id":"123456",
            "quantity":"",
            "item_price":69.99
        }
    ],
    "content_name":"Stackoverflow",
    "content_category":"",
    "content_ids":[
        "w123456as"
    ],
    "content_type":"product",
    "value":420.69,
    "currency":"USD"
}


如何创建正则表达式来提取JSON数据?

pgccezyw

pgccezyw1#

您可以尝试:

import re
from ast import literal_eval

js_txt = """\
    function fbq_w123456as() {
            fbq('track', 'AddToCart', {
            contents: [
            {
                    'id': '123456',
                    'quantity': '',
                    'item_price':69.99                                                        }
            ],
            content_name: 'Stackoverflow',
            content_category: '',
            content_ids: ['w123456as'],
            content_type: 'product',
            value: 420.69,
            currency: 'USD'
            });
    }"""

out = re.search(r"'AddToCart', (\{.*?\})\);", js_txt, flags=re.S).group(1)
out = re.sub(r"""([^"'\s]+):""", r'"\1":', out)
out = literal_eval(out)
print(out)

字符串
打印python dict:

{
    "contents": [{"id": "123456", "quantity": "", "item_price": 69.99}],
    "content_name": "Stackoverflow",
    "content_category": "",
    "content_ids": ["w123456as"],
    "content_type": "product",
    "value": 420.69,
    "currency": "USD",
}

相关问题