如何使用Regex逃脱Python中的一些信息



我有一个文本文件,我使用python读了。它从网址开始,并提供其他信息,从(y)或(n)开始。在线之间,可能有几个空白行。例如,文本文件可以像这样,

http://usatoday30.usatoday.com/money/industries/energy/2005-12-28-enron-participants_x.htm
(y) Lay, Kenneth
(y) Skilling, Jeffrey
(n) Howard, Kevin
(n) Krautz, Michael

我想要名称以(y)开头,然后返回为列表。说,对于这种情况,返回列表就是这样,

result = ["Lay, Kenneth", "Skilling, Jeffrey"]

我读取数据如下,

poi_names_data = open("../final_project/poi_names.txt", "r")
for row in poi_names_data:
    print row, "n"

如何从行中提取正确的信息?

如注释中所建议的,您可以使用 startswith来决定是否要处理行并使用 re.sub删除(y),领先空间和线路断开n,之后应给予它。您的预期输出:

import re
result = []
with open("test.txt") as text:
    for row in text:
        if row.startswith("(y)"):
            result.append(re.sub(r"(y)s+|n", "", row))
result
# ['Lay, Kenneth', 'Skilling, Jeffrey']

我建议按行读取文件并相应地读取文件。原因是,如果您的文件很大,真的很大,那么性能就会更好,并且记忆足迹更少。

import io
import re
result = []
rx = re.compile(r'(?<=(y)).*', re.MULTILINE)
with open('data.txt','r+') as f:
    for line in f:
        match = rx.search(line)
        if match:
            result.append(match.group(0).strip())
print(result)

我将从您的示例数据中获取以下输出。(假设数据存储在文件test.txt中)

['Lay, Kenneth', 'Skilling, Jeffrey']

最新更新