2017-02-28 51 views
2

说我有文本字符串是这样的:的Python /正则表达式 - 解析文本描述的最佳方式

  • 富士通LifeBook E734 13.3" 2.5GHz的酷睿i5/4GB内存/ 500GB SSHD像新的一样
  • 的Mac Pro,早2009年4核2.66GHz的英特尔至强/ 16GB RAM/1Tb的HD

我想解析成品牌,型号,处理器,屏幕尺寸,高清大小,RAM,条件

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

目前,我做了以下内容:

  1. 遍历计算机的静态列表的品牌和型号
    • 如果匹配的话,那些拉出来的字符串
  2. 分割字符串按“”和“/”。
  3. 使用is x in y至:
    • 找'“和 ”“。找到大小
    • 寻找 ”GHz的“ 找处理器速度
    • 查找 'MB',”千兆”, 'T'

下面是一些示例代码:

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

通常情况下,你会想在string分成列表,然后遍历它,看它是否出现在complist字典(而不是周围的其他方法):

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

这样做,你将能够减少回路的数量

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

关于集: 因为它看起来像你只需要找到如果字是在列表中。您可以将复杂表存储为而不是列表成员测试成组的速度为O(n)(“大O-记法”),并且比列表