Python / Regex - 解析文本描述的最佳方法

时间:2017-02-28 19:08:54

标签: python regex

说我有这样的文字字符串:

  • 富士通LifeBook E734 13.3" i5 2.5GHz / 4Gb RAM / 500Gb SSHD如新
  • Mac Pro,2009年初4核2.66GHz Intel Xeon / 16Gb RAM / 1Tb HD

我想解析Make,Model,Processor,Screen size,HD Size,RAM,Condition

我想知道,什么是解析这些字符串的最pythonic方式?

目前,我正在执行以下操作:

  1. 迭代计算机制作和模型的静态列表
    • 如果匹配,请将其拉​​出字符串
  2. 按"拆分字符串"和" /"。
  3. 使用is x in y
    • 寻找'"'和" in。"找到大小。
    • 寻找" GHz"找到处理器速度。
    • 寻找' Mb',' Gb',' Tb'。
  4. 以下是一些示例代码:

    import re
    data={}
    complist = {'make':['Apple','Toshiba','HP', 'Fujitsu'...],
                'model':['Air','Surface','Zenbook','Lifebook','Mac Pro',...],
                'condition':['New','Used','Refurbished'...]}
    
    string = 'Fujitsu LifeBook E734 13.3" i5 2.5GHz/4Gb RAM/500Gb SSHD Like NEW'
    for comparison in complist :
        for compare in complist[comparison]:
            if compare in string:
                data[comparison]=compare
                string = string.replace(compare, '')
    
    stringsplit=re.findall(r"[\w']+", string )
    
    for i,s in enumerate(stringsplit):
        if any(key in s for key in ['Mb','Gb','Tb']):
            ...
            data['Ram']=...
        if any(...
    

    我可以蛮力这个,但是" ......"我正在寻找一些指导。此外,第一部分也可以更有效地完成。

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

通常情况下,您需要将string拆分为一个列表,然后遍历它以查看它是否出现在complist字典中(而不是相反):

stringList = string.split()
for s in stringList:
    #loop through the complist to find matches

这样做,您将能够减少循环次数

关于列表: 使用排序列表! 因为你可以使用二进制搜索,这是非常快的

关于集合: 因为看起来你只需要查找单词是否在列表中。您可以将完整列表存储为,而不是列表。集合中成员资格测试的速度是O(n)(" Big O-notation"),并且比列表更快