【问题标题】:Regular expression to get the following in python在python中获取以下内容的正则表达式
【发布时间】:2018-06-19 09:25:04
【问题描述】:

我正在解析这个文件 internet.test 它有多个条目,其中一些是:

Jun 15 16:26:33 dnsmasq[1979]: query[AAAA] play.google.com from 192.168.1.11
Jun 15 16:27:13 dnsmasq[1979]: forwarded play.google.com to 8.8.8.8
Jun 15 16:27:45 dnsmasq[1979]: reply play.google.com is 2404:6800:4007:810::200e

我想获取日期和时间(例如:从 2015 年 6 月 1 日 16:26:33 开始,从 15 年 6 月 2 日 16:27:13 开始,从 15 年 6 月 3 日 16:27:45 开始)并存储它在一个列表中(例如:Dates= ['Jun 15 16:26:33','Jun 15 16:27:13','Jun 15 16:27:45'])。

我尝试从每行中提取前 14 个元素,如下所示,但没有成功。

@staticmethod
def getDate():
    Dates = []
    date = ''
    with open("internet.test", "r") as file:
        for line in file:
            for i in range(15):
                date += line[i]
            Dates.append(date)
        return display(Dates)

是否可以用正则表达式获取和存储日期和时间?

【问题讨论】:

  • 尝试使用^\w{3}\s\d{2}\s\d{2}:\d{2}:\d{2},如图所示here
  • 使用.split(" ") 并循环每个元素怎么样?

标签: python regex file parsing


【解决方案1】:

您根本不需要正则表达式,使用line[:15] 可以轻松地将行剪切为 14 个字符,并且您的整个循环可以通过一些列表理解简化为 1 行代码:

with open("internet.test", "r") as file:
    return display([line[:15] for line in file])

或分两步,使其更明确和可读:

with open("internet.test", "r") as file:
    Dates = [line[:15] for line in file]
return display(Dates)

【讨论】:

  • 它不工作.. 输出是:Dates =['u','u','u','u'... 等等]
  • 如果文本文件的内容如你所说,那是不可能的。手动打开文件并更正您的问题以显示其中的读取数据
  • 对不起,打印您建议的代码 sn-p 是我的错误!谢谢...
【解决方案2】:

您可以使用^\w{3}\s\d{2}\s\d{2}:\d{2}:\d{2} 来匹配您的日期。实时正则表达式here

import re
dates = []
with open("internet.test","r") as content_file:
    for line in content_file:
        m = re.search('^\w{3}\s\d{2}\s\d{2}:\d{2}:\d{2}',line)
        dates.append(m.group(0))

dates = 
['Jun 15 16:26:33', 'Jun 15 16:27:13', 'Jun 15 16:27:45']

【讨论】:

    【解决方案3】:
    def dates_from_file(f):
        with open(f) as file:
            for l in file:
                yield l[0:16]
    
    dates = [d for d in dates_from_file("internet.test")]
    print(dates)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2015-12-10
      • 2011-04-12
      • 2017-10-26
      相关资源
      最近更新 更多