python - 用于匹配日期时间后跟空格和任何字符的正则表达式

标签 python regex string split regex-group

我需要分析存储桶中的一些数据,并且遇到了一些困境。 这是每个文件中的行类型:

“2018-09-08 10:34:49 10.0 MiB 路径/目录

需要的是用粗体捕获所有内容,同时记住某些分隔符是制表符,有时是空格。

换句话来说,我需要从日期和时间结束那一刻起的所有内容(不包括其前面的制表符或空格)

我尝试过这样的事情:

p = re.compile(r'^[\d\d\d\d.\d\d.\d\d\s\d\d:\d\d:\d\d].*')
for line in lines:
    print(re.findall(line))

如何解决这个问题?

编辑: 如果我还想在新匹配的字符串中创建新组怎么办?假设我想重新创建它 --> 10MiBengagementName/folder/file/something.xlsxengagementName扩展类型something.xlsx

重新编辑: 路径/到/目录通常指向一个文件(并且所有文件都有扩展名)。从你们一直在帮助我的重新格式化的字符串中,有没有一种方法可以继续构建正则表达式模式,以允许我通过对 fileExtensionType 进行过滤来“创建”一个新组(我想通过在字符串末尾搜索类似 .anything) 的东西并将结果添加到格式化的正则表达式字符串中?

最佳答案

不要为正则表达式而烦恼。您知道该行的格式。只需将其拆分即可:

from datetime import datetime

for l in lines:
    line_date, line_time, rest_of_line = l.split(maxsplit=2)
    print([line_date, line_time, rest_of_line])
    # ['2018-09-08', '10:34:49', '10.0 MiB path/of/a/directory']

特别注意 maxsplit 参数的使用。这可以防止它分割大小或路径。我们可以这样做,因为我们知道日期中间有一个空格,后面有一个空格。

如果尺寸总是中间有一个空格,后面也有一个空格,我们也可以将其增加到 4 个分割来分隔尺寸:

for l in lines:
    line_date, line_time, size_quantity, size_units, line_path = l.split(maxsplit=4)
    print([line_date, line_time, size_quantity, size_units, line_path])
    # ['2018-09-08', '10:34:49', '10.0', 'MiB', 'path/of/a/directory']

请注意,路径中的额外连续空格和空格不会搞砸:

l = "2018-09-08 10:34:49     10.0   MiB    path/of/a/direct       ory"
line_date, line_time, size_quantity, size_units, line_path = l.split(maxsplit=4)
print([line_date, line_time, size_quantity, size_units, line_path])
# ['2018-09-08', '10:34:49', '10.0', 'MiB', 'path/of/a/direct       ory']

如果需要,您可以将各个部分重新连接在一起:

line_size = size_quantity + ' ' + size_units


如果你想要某些东西的时间戳,你可以解析它:

# 'T' could be anything, but 'T' is standard for the ISO 8601 format
timestamp = datetime.strptime(line_date + 'T' + line_time, '%Y-%m-%dT%H:%M:%S')

关于python - 用于匹配日期时间后跟空格和任何字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55997784/

相关文章:

java - 将字符串转换为字符数组

Python 重新查找

python - 如何从正则表达式返回的组匹配列表中仅读取由正则表达式标识的完整匹配

regex 和 grep 仅匹配只有一位或两位数字的字符串

c++ - 无法从 istringstream (C++) 获取 line()

c# - 从字符串中删除字符

python - 通过最大值获取dict键

python - 如何用抽象模型定义外键关系?

python - 在 Scrapy 中发送帖子请求

Python 和 psycopg 检测网络错误