正则表达式python数据提取

时间:2018-12-12 06:26:28

标签: python regex csv

如何使用python正则表达式从下面的两个字符串中提取数据

TASK000123-Tomcat server hosted on tbu.test1 is down-P1 --In Progress

TASK000123-Tomcat server hosted on tbu.test1 is down-P1 --Completed

我需要以下csv文件:

  

格式:TaskID,优先级,状态

TASK000123,P1,In Progress

TASK000123,P2,Completed

我该怎么做?感谢您的帮助

2 个答案:

答案 0 :(得分:2)

这是使用简单迭代的一种方法。

例如:

s = """TASK000123-Tomcat server hosted on tbu.test1 is down-P1 --In Progress
TASK000123-Tomcat server hosted on tbu.test1 is down-P1 --Completed"""

result = [["TaskID","Priority","Status"]]

for i in s.splitlines():
    val = i.split("-")                          #Split by '-'
    result.append([val[0], val[2], val[-1]])
print(result)

输出:

[['TaskID', 'Priority', 'Status'],
 ['TASK000123', 'P1 ', 'In Progress'],
 ['TASK000123', 'P1 ', 'Completed']]

答案 1 :(得分:2)

在此处使用re.findall的选项:

input = "TASK000123-Tomcat server hosted on tbu.test1 is down-P1 --In Progress\nTASK000123-Tomcat server hosted on tbu.test1 is down-P1 --Completed"
results = re.findall(r"(TASK\d+).*?-(P\d+) --(.*)(?=\n|$)", input)
print(results)

[('TASK000123', 'P1', 'In Progress'), ('TASK000123', 'P1', 'Completed')]

请注意,此处无需使用DOT ALL模式,因为我们永远不需要.*来匹配换行符。另外,上面的方法似乎也可以不使用MULTILINE模式。