在多行之间解析文本 - Python 2.7和re Module

时间:2015-06-27 18:38:48

标签: regex python-2.7 delimiter

我有一个我要解析的文本文件。该文件包含我想要提取的多个项目。我想捕捉结肠之间的所有内容":"还有一个特定的词。我们来看下面的例子。

Description : a pair of shorts
amount : 13 dollars
requirements : must be blue
ID1 : 199658
----

以下代码解析信息。

import re

f = open ("parse.txt", "rb")
fileRead = f.read()

Description = re.findall("Description :(.*?)amount", fileRead, re.DOTALL)
amount = re.findall("amount :(.*?)requirements", fileRead, re.DOTALL)
requirements = re.findall("requirements :(.*?)ID1", fileRead, re.DOTALL)
ID1 = re.findall("ID1 :(.*?)-", fileRead, re.DOTALL)

print Description[0]
print amount[0]
print requirements[0]
print ID1[0]

f.close()

问题是有时文本文件会有一个新行,例如

Description 
: a pair of shorts
amount 
: 13 dollars
requirements: must be blue
ID1: 199658
----

在这种情况下,我的代码无法正常工作,因为它无法找到"说明:"因为它现在被分成一个新行。如果我选择将搜索更改为":(。*?)要求"它不会只返回13美元,它会返回一条短裤和13美元,因为所有的文字都在第一个冒号和单词之间,要求。无论是否有换行符,我想要一种解析信息的方法。我遇到了障碍,非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

你可以这样做:

import re
f = open ("new.txt", "rb")
fileRead = f.read()
keyvals = {k.strip():v.strip() for k,v in dict(re.findall('([^:]*):(.*)(?=\b[^:]*:|$)',fileRead,re.M)).iteritems()}
print(keyvals)
f.close()

输出:

{'amount': '13 dollars', 'requirements': 'must be blue', 'Description': 'a pair of shorts', 'ID1': '199658'}

答案 1 :(得分:0)

你可以使用这样的正则表达式:

grep '39=' filename | cut -d'|' -f3-4 | sed -e 's/55=//' -e 's/|6=/ /'

<强> Working demo

引用您可以使用的代码:

Description[^:]*(.*)
   ^--- use the keyword you want