如何使用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
我该怎么做?感谢您的帮助
答案 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
模式。