【问题标题】:Parsing javaScript arrays in the Python dictionaries在 Python 字典中解析 javaScript 数组
【发布时间】:2015-02-24 18:41:15
【问题描述】:

所以我有一个包含类似以下代码的公共网页:

var arrayA = new Array();
arrayA[0] = new customItem("1","Name1","description1",1.000,2.000);arrayA[1] = new customItem("2","Name2","description2",4.000,8.000);

我想要做的是让 Python 读取这个页面并将数据转换为 2 个字典,其中名称+描述是关键。

即,

dict1["Name1Description1"] = 1.000

dict2["Name1Description1"] = 2.000

dict1["Name2Description2"] = 4.000

dict2["Name2Description2"] = 8.000

有没有一种简单的方法可以做到这一点,或者我们几乎必须将其解析为任何其他字符串?显然数组可以是任意长度。

谢谢!

【问题讨论】:

    标签: javascript python arrays dictionary


    【解决方案1】:

    是的,这可以使用正则表达式。

    import re
    
    st = '''
    var arrayA = new Array();
    arrayA[0] = new customItem("1","Name1","description1",1.000,2.000);arrayA[1] = new customItem("2","Name2","description2",4.000,8.000);
    '''
    
    dict1, dict2 = {}, {}
    matches = re.findall('\"(\d+)\",\"(.*?)\",\"(.*?)\",(\d+.\d+),(\d+.\d+)', st, re.DOTALL)
    for m in matches:
        key = m[1] + m[2]
        dict1[key] = float(m[3])
        dict2[key] = float(m[4])
    
    print(dict1)
    print(dict2)
    
    # {'Name1description1': 1.0, 'Name2description2': 4.0}
    # {'Name1description1': 2.0, 'Name2description2': 8.0}
    

    正则表达式的逻辑是:

    \" - Match a double quote
    \"(\d+)\" - Match any number of digits contained in between two double quotes
    \"(.*?)\" - Match any number of any characters contained between two double quotes
    (\d+.\d+) - Match any number of numbers with a dot followed by any number of numbers
    , - Match a comma
    

    所以正则表达式会将 js 字符串输入与这个预期的模式匹配。但我假设 js 在逗号之间没有空格。你可以先去掉逗号,然后运行它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多