解析多行之间的文本 - Python 2.7 和 re 模块
Parse text between multiple lines - Python 2.7 and re Module
我有一个要解析的文本文件。该文件有多个我要提取的项目。我想捕获冒号“:”和特定单词之间的所有内容。让我们来看下面的例子。
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
----
在这种情况下,我的代码将无法工作,因为它无法找到 "Description :",因为它现在被分隔成一个新行。如果我选择将搜索更改为“:(.*?)requirements”,它不会 return 只是 13 美元,它会 return 一条短裤和 13 美元,因为所有的文字都是在第一个冒号和单词 requirements 之间。无论是否有换行符,我都想有一种解析信息的方法。我遇到了障碍,非常感谢您的帮助。
您可以简单地这样做:
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'}
您可以像这样使用正则表达式:
Description[^:]*(.*)
^--- use the keyword you want
引用您可以使用的代码:
import re
f = open ("parse.txt", "rb")
fileRead = f.read()
Description = re.findall("Description[^:]*(.*)", fileRead)
amount = re.findall("amount[^:]*(.*)", fileRead)
requirements = re.findall("requirements[^:]*(.*)", fileRead)
ID1 = re.findall("ID1[^:]*(.*)", fileRead)
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
----
下面的代码将信息解析出来。
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
----
在这种情况下,我的代码将无法工作,因为它无法找到 "Description :",因为它现在被分隔成一个新行。如果我选择将搜索更改为“:(.*?)requirements”,它不会 return 只是 13 美元,它会 return 一条短裤和 13 美元,因为所有的文字都是在第一个冒号和单词 requirements 之间。无论是否有换行符,我都想有一种解析信息的方法。我遇到了障碍,非常感谢您的帮助。
您可以简单地这样做:
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'}
您可以像这样使用正则表达式:
Description[^:]*(.*)
^--- use the keyword you want
引用您可以使用的代码:
import re
f = open ("parse.txt", "rb")
fileRead = f.read()
Description = re.findall("Description[^:]*(.*)", fileRead)
amount = re.findall("amount[^:]*(.*)", fileRead)
requirements = re.findall("requirements[^:]*(.*)", fileRead)
ID1 = re.findall("ID1[^:]*(.*)", fileRead)
print Description[0]
print amount[0]
print requirements[0]
print ID1[0]
f.close()