Python如何查找字符串内datetime片段并批量为其添加单引号
Python实现给字符串中datetime调用片段加单引号的方案
场景示例
输入字符串:
{'Y': [('A', 'X', datetime.datetime(2022, 3, 20, 22, 58, 30, 128000))]}
期望输出:
{'Y': [('A', 'X', 'datetime.datetime(2022, 3, 20, 22, 58, 30, 128000)')]}
要求适配字符串中存在多个datetime.datetime(...)片段的场景。
最优实现
用正则表达式全局匹配替换即可,代码简洁、性能高,不需要做复杂的语法树解析:
import re def wrap_datetime_with_quotes(raw_str: str) -> str: # 正则匹配所有datetime.datetime(xxx)格式片段,非贪婪匹配避免跨段匹配 return re.sub(r"(datetime\.datetime\(.*?\))", r"'\1'", raw_str) # 多片段场景测试 raw = "{'Y': [('A', 'X', datetime.datetime(2022, 3, 20, 22, 58, 30, 128000)), ('B', 'Z', datetime.datetime(2023, 1, 1, 0, 0, 0))]}" print(wrap_datetime_with_quotes(raw)) # 输出:{'Y': [('A', 'X', 'datetime.datetime(2022, 3, 20, 22, 58, 30, 128000)'), ('B', 'Z', 'datetime.datetime(2023, 1, 1, 0, 0, 0)')]}
说明
- 正则中
\.用于转义匹配点号,.*?是非贪婪匹配,会匹配到离起始位置最近的闭合右括号,不会出现多个datetime片段时匹配过长的问题 - 常规序列化生成的这类字符串中,datetime构造参数都是数字、逗号,不存在嵌套括号,上面的方案完全覆盖需求
- 如果极端场景下datetime参数内存在嵌套括号,可以自行实现括号计数的匹配逻辑,常规业务场景下正则方案的开发成本、运行效率都是最优的
内容的提问来源于stack exchange,提问作者anshuk_pal
相关产品推荐
相关产品推荐

