【问题标题】:Regular expressions python data extraction正则表达式python数据提取
【发布时间】:2019-05-13 05:12:17
【问题描述】:

如何使用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 文件:

格式:任务ID、优先级、状态

TASK000123,P1,In Progress

TASK000123,P2,Completed

我该怎么做?谢谢你帮助我

【问题讨论】:

    标签: python regex csv


    【解决方案1】:

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

    例如:

    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']]
    

    【讨论】:

    • 对我来说太快了,我正要发布同样的东西:)
    • 非常感谢。您能告诉我如何将结果放入 csv 文件中吗?
    【解决方案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 模式的情况下工作。

    【讨论】:

    • 很好,还是希望我像你们中的一些人一样知道正则表达式
    • @Jaba 要真正精通正则表达式,您将不得不开始大量使用它。有门槛,山的另一边有一罐金子。
    • @TimBiegeleisen 不错!正则表达式最准确的定义;)
    • 当我像你一样精通时,我可能会拥有和你现在一样的代表,你会加倍:D
    • 也许......但网站上存在一个现象/问题,主要贡献者退出了大约 200K。一旦你拿到第二件 T 恤,我想继续下去有什么意义:P
    猜你喜欢
    • 2013-04-04
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    相关资源
    最近更新 更多