使用python中的正则表达式提取数据

时间:2014-02-20 08:10:03

标签: python regex

我正在尝试使用序列号和部件号等解析文件,并将它们分类到一个结构中。我想通过标记标识符来解析这个文件,但是我只需要我的数据结构的实际数字/代码。我需要假设所有的数字/​​代码都有不同的长度,但是我可以依赖于数字/代码之前的标识符,也取决于每个值之后的结束行。

//Text file with serials and information
Serial: 523524234235
Part Number: MHC-1251-A
Manufacturer: KNL-ETA

Serial: 523524281238
Part Number: QLC-851
Manufacturer: MHQ-MCE

.
.
.

3 个答案:

答案 0 :(得分:3)

在每一行上,您可以应用正则表达式来提取所需的部分,如下所示:

>>> import re
>>> text = "Serial: 523524234235"
>>> m = re.search(r'Serial: (\d+)', text)
>>> m.group(1)
'523524234235'

你也可以使用split来获得每一行中的两个部分,然后检查第一部分以查看它是什么类型的标记,它是Serial,Part Number等。

你的正则表达式需要一些改进。

m = re.search(r'Serial: (\d+)', text) ==> ` m = re.search(r'Serial:[\s]*(\d+)[\s]*', text)`

答案 1 :(得分:2)

打开文件和readlines并迭代并按':'拆分以获取您的号码。如果值不是逐行的,则可以使用正则表达式。

答案 2 :(得分:1)

我同意@loki;从你所说的,正则表达式的使用是没有必要的。从像您这样的文件中提取的适当结构可能设置为:

parts={} # data structure
entry={} # single set
for line in open('file.dat', 'r'):
  flds = [fld.strip() for fld in line.split(':')[:2]]
  if len(flds) > 1:
    k,v = flds
    if k == 'Serial': # use serial number as key vor corresponding entry
      entry = {}
      parts[v] = entry
    else:
      entry[k] = v # save information in data set

结果:

{'523524234235': {'Part Number': 'MHC-1251-A', 'Manufacturer': 'KNL-ETA'}, '523524281238': {'Part Number': 'QLC-851', 'Manufacturer': 'MHQ-MCE'}, ...}