【问题标题】:Python/Regex - Best way to parse text descriptionPython/Regex - 解析文本描述的最佳方式
【发布时间】:2017-03-01 04:28:47
【问题描述】:

假设我有这样的文本字符串:

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

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

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

目前,我正在做以下事情:

  1. 迭代计算机品牌和型号的静态列表
    • 如果匹配,则将其从字符串中拉出
  2. 用“”和“/”分割字符串。
  3. 使用is x in y 来:
    • 查找 '"' 和 "in." 以查找大小。
    • 查找“GHz”以了解处理器速度。
    • 查找“Mb”、“Gb”、“Tb”。

这里有一些示例代码:

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(...

我可以强制执行此操作,但“...”是我正在寻找一些指导的地方。此外,第一部分可能也可以更有效地完成。

非常感谢任何帮助。

【问题讨论】:

    标签: python regex


    【解决方案1】:

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

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

    这样做可以减少循环次数

    关于列表: 使用排序列表! 因为你可以使用二分查找,速度非常快

    关于集: 因为看起来您只需要查找单词是否在列表中。您可以将 complists 存储为 sets 而不是 listsmembership test 在集合中的速度是 O(n)(“Big O-notation”),并且比列表快

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多