python - 正则表达式模式匹配python中的日期时间
问题描述
我有一个包含日期时间的字符串,我正在尝试根据日期时间的出现来拆分字符串,
data="2018-03-14 06:08:18, he went on \n2018-03-15 06:08:18, lets play"
我在做什么,
out=re.split('^(2[0-3]|[01]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])$',data)
我得到了什么
["2018-03-14 06:08:18, he went on 2018-03-15 06:08:18, lets play"]
我想要的是:
["2018-03-14 06:08:18, he went on","2018-03-15 06:08:18, lets play"]
解决方案
您想用至少 1 个空格和类似日期的模式进行拆分,因此,您可以使用
re.split(r'\s+(?=\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}\b)', s)
查看正则表达式演示
细节
\s+
- 1+ 空白字符(?=\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}\b)
- 一个积极的前瞻,确保在当前位置的左侧,有\d{2}(?:\d{2})?
- 2 或 4 位数字-
- 一个连字符\d{1,2}
- 1 或 2 位数字-\d{1,2}
- 又是一个连字符和 1 或 2 位数字\b
- 一个单词边界(如果没有必要,删除它,或者替换为(?!\d)
,以防您可能将日期粘在字母或其他文本上)
import re
rex = r"\s+(?=\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}\b)"
s = "2018-03-14 06:08:18, he went on 2018-03-15 06:08:18, lets play"
print(re.split(rex, s))
# => ['2018-03-14 06:08:18, he went on', '2018-03-15 06:08:18, lets play']
注意如果在日期之前不能有空格,在 Python 3.7 和更新版本中你可以使用r"\s*(?=\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}\b)"
(注意*
带有它的量词\s*
将允许零长度匹配)。对于旧版本,您将需要使用@blhsing 建议的解决方案或安装PyPi 正则表达式模块并r"(?V1)\s*(?=\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}\b)"
使用regex.split
.
推荐阅读
- python - 使用 pyodbc & SQL Server,如何插入外键
- node.js - 导入 ESM 模块时的 await 关键字效果是什么
- r - R在调用iconv时出现段错误
- jsf - o:EJB 类中的套接字 - 我在 org.omnifaces.util.Messages 中得到一个 NPE
- javascript - 如何将所有引导 javascript 文件包含到模板中?
- python - 在字符之间添加单个空格,在单词之间添加多个空格
- r - 如何将矩阵乘以已知向量以返回数组
- css - 清除后 Tailwind css 不会减小文件大小
- nginx - 如何最好的 RTMP 转发以克服高延迟
- excel - Excel 源工作簿未更新