gpt4 book ai didi

python - 使用python正则表达式匹配时间

转载 作者:行者123 更新时间:2023-11-28 21:57:03 26 4
gpt4 key购买 nike

我正在尝试以下午 6:30、早上 7 点或午夜的形式解析一个 csv 文件。我用谷歌搜索并阅读了 python 文档中的正则表达式文档,但未能成功实现它们。

我第一次尝试匹配它们是:

re.findall(r'^d{1,2}(:d{1,2})?$', string)

但这没有用。我在那里有括号和问号,因为有时并不总是超过小时。另外,我什至还没有开始考虑如何匹配上午和下午。感谢您的帮助!

最佳答案

首先,要匹配数字,您需要 \d,而不仅仅是 d

re.findall(r'^\d{1,2}(:\d{1,2})?$', string)

其次,正如所写,您的正则表达式将只匹配一个字符串,该字符串恰好是单个时间,没有别的,因为 ^ 表示“字符串的开头”而 $ 表示"字符串结尾。如果您想在整个字符串中查找所有时间,则可以省略这些:

re.findall(r'\d{1,2}(:\d{1,2})?', string)

就上午/下午而言,您可以添加另一个可选组:

re.findall(r'\d{1,2}(:\d{1,2})?(am|pm)?', string)

当然,因为除了前 1 位或 2 位数字之外的所有内容都是可选的,您还将匹配任何一位或两位数字。您可以至少要求 am/pm 或冒号和另外两个数字:

re.findall(r'\d{1,2}((am|pm)|(:\d{1,2})(am|pm)?)', string)

但是,findall 的行为有点奇怪:如果您的模式中有匹配的组,它只会返回组而不是完整的匹配。因此,您可以将它们更改为不匹配的组:

re.findall(r'\d{1,2}(?:(?:am|pm)|(?::\d{1,2})(?:am|pm)?)', string)

关于python - 使用python正则表达式匹配时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20437207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com