python - 使用替换方法将日期 YYYYMMDD 替换为 YYYY-MM-DD 的正确方法
问题描述
用 Python 打开文本文件并将日期从 YYYYMMDD 替换为 YYYY-MM-DD 的最佳做法是什么?
.replace('YYYYMMDD','YYYY-MM-DD')
- 需要找到所有 8 位长的数字(在每行的前 20 个字符中)
- 在 4 位和 6 位之后添加破折号
解决方案
您可以使用正则表达式以不同格式替换具有相同数字的数字:
>>> import re
>>> s = "Text to replace parts of 20190913 here is the part to replace"
>>> re.sub(r'\s(\d{4})([0-1][0-9])([0-3][0-9])\s', r' \1-\2-\3 ', s)
'Text to replace parts of 2019-09-13 here is the part to replace'
解释:
\d
捕获数字(数字)。
{n}
标记要捕获的位数
\s
捕获空格,因此我们不会捕获长度超过 8 位的数字序列。
(...)
标记组,可以被索引
[]
的集合只允许匹配某些字符,以捕获非日期
所以我们捕获三个组,一个接一个,第一个带有任何 4 位长的数字,下一个必须以0
or开头1
第二个必须以 between 0
and开头3
;-
而不是我们使用相同的组,只是在替换部分中用字符分隔。用于指定原始字符串编码,因此
由正则表达式而不是 Python 提取。r''
\
推荐阅读
- azure-devops-migration-tools - Azure DevOps 迁移工具能否用于备份 Boards 项目的工作项?
- python - 使用 gspread_pandas 导入 google sheet 时如何指定数据类型?
- c - 将汇编语言函数调用到 ac 程序中
- c++ - 推断成员变量类型
- javascript - 使用 react-hook-form 将输入框中的值从字符串转换为数组
- python - 从单个列中的 Pandas 数据框在 SQL 中创建大型“In”语句
- css - 对图像做出响应
- azure-devops - 通过 Azure DevOps REST API 获取 PR 代码覆盖率差异状态
- java - 它是如何工作的,当我总是打开应用程序时,它会运行该方法,而不仅仅是在我单击运行时?
- javascript - 从节点js中的另一个类调用一个类