首页 > 解决方案 > Python 中的迄今为止的字符串(00Z 1983 年 2 月 26 日至 00-26-02-83)

问题描述

我有一个文本文件,我需要在其中细化包含日期的行(例如 00Z 2 月 26 日)想要从字符串中提取日期,如下所示:

<H2>04018 BIKF Keflavikurflugvollur Observations at 00Z 26 Feb 1983</H2>
<H2>04018 BIKF Keflavikurflugvollur Observations at 12Z 26 Feb 1983</H2>
<H2>04018 BIKF Keflavikurflugvollur Observations at 00Z 28 Feb 1983</H2>
<H2>04018 BIKF Keflavikurflugvollur Observations at 12Z 28 Feb 1983</H2>

等等。

所以我想找到包含日期的行,然后提取 00Z 26 Feb 1983 并将其转换为 00-26-02-1983。怎么可能在 Python 中做到这一点?谢谢

标签: pythonstringdatetimetext-filesextract

解决方案


一起使用regex_datetime

import re
from datetime import datetime

line = '<H2>04018 BIKF Keflavikurflugvollur Observations at 00Z 26 Feb 1983</H2>'
matches = re.findall(r"(\d{2}Z \d{2} [a-zA-Z]{3} \d{4})", line)
for match in matches:
    line = line.replace(match, datetime.strptime(match, '%HZ %d %b %Y').strftime('%H-%d-%m-%Y'))
print(line)

另一种选择是re.sub直接使用如下

import re
from datetime import datetime

def my_replace(match):
    match = match.group()
    return datetime.strptime(match, '%HZ %d %b %Y').strftime('%H-%d-%m-%Y')

line = '<H2>04018 BIKF Keflavikurflugvollur Observations at 00Z 26 Feb 1983</H2>'
line = re.sub(r"(\d{2}Z \d{2} [a-zA-Z]{3} \d{4})", my_replace, line)
print(line)

输出是

    <H2>04018 BIKF Keflavikurflugvollur Observations at 00-26-02-1983</H2>

推荐阅读