解析这一行文本的最有效方法是什么?

时间:2012-12-22 03:54:46

标签: regex parsing python-2.7

以下是我从网上提取的一行:

  AIG 30美元AIG是一家在纽约证券交易所上市的国际知名保险公司。需要一段时间。手动自动激活3 0.0510,0.0500,0.0300 [提取]

我想通过解析文本并检索相关数据来创建5个单独的变量。但是,我真的不明白REGEX文档!任何人都可以通过这个例子指导我如何正确地做到这一点吗?

  
    

名称= AIG

         

CurrentPrice = $ 30

         

状态=有效

         

World_Ranking = 3

         

历史= 0.0510,0.0500,0.0300

  

1 个答案:

答案 0 :(得分:1)

不确定你想在这里实现什么。没有必要使用正则表达式,您可以使用str.split

>>> str = "AIG $30 AIG is an international renowned insurance company listed on the NYSE. A period is required. Manual Auto Active 3 0.0510, 0.0500, 0.0300 [EXTRACT]"
>>> list = str.split()
>>> dict = { "Name": list[0], "CurrentPrice": list[1], "Status": list[19], "WorldRanking": list[20], "History": ' '.join((list[21], list[22], list[23])) }

#output
>>> dict
{'Status': 'Active', 'CurrentPrice': '$30', 'Name': 'AIG', 'WorldRanking': '3', 'History': '0.0510, 0.0500, 0.0300'}

您可能希望将其更改为list[19]而不是依赖于公司的说明长度,而不是使用list[-n]等。像那样:

>>> history = ' '.join(list[-4:-1])
>>> history
'0.0510, 0.0500, 0.0300'

对于浮动历史索引,可以更容易使用re

>>> import re
>>> history = re.findall("\d\.\d{4}", str)
>>> ['0.0510', '0.0500', '0.0300']

为了识别状态,您可以获取历史值的索引,然后减去一个:

>>> [ i for i, substr in enumerate(list) if re.match("\d\.\d{4}", substr) ]
[21, 22, 23]

>>> list[21:24]
['0.0510,', '0.0500,', '0.0300,']

>>> status = list[20]
>>> status
'3'