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

2024-10-04 03:29:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • Fujitsu LifeBook E734 13.3英寸i5 2.5GHz/4Gb RAM/500Gb固态硬盘,全新
  • Mac Pro,2009年初4核2.66GHz Intel Xeon/16Gb RAM/1Tb HD

我想把它分解成品牌,型号,处理器,屏幕大小,高清大小,内存,状态

我在想,解析这些字符串的最具python风格的方法是什么?你知道吗

目前,我正在做以下工作:

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

我可以强行这样做,但“…”是我要找的指导。而且,第一部分可能也可以更有效地完成。你知道吗

非常感谢您的帮助。你知道吗


Tags: 字符串infordatastringifcomparisonram
1条回答
网友
1楼 · 发布于 2024-10-04 03:29:44

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

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

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

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

关于集合: 因为看起来你只需要找出单词是否在列表中。您可以将complist存储为集合,而不是列表。集合中隶属度检验的速度为O(n)(“大O-表示法”),比列表快

相关问题 更多 >