2017-02-28 63 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-記法」),並且比列表