使用正则处理日期格式时遇‘error: bad escape \d’错误求助
解决正则转义错误并实现日期格式替换(11/13.2015 → 11/13/2015)
问题根源分析
你遇到的error: bad escape \d at position 1和功能失效,主要有三个原因:
- 字符类误用:你写的
"[\d{2}\/\d{2}\.\d{4}]"是正则字符类([]),它只会匹配集合内的单个字符(比如数字、/、.),而非完整的日期模式。 - 转义错误:Python字符串中
\d会被解析为无效转义序列,必须用原始字符串(前缀r)或者双转义\\d来避免。 - 替换逻辑错误:替换目标写的
"[\d{2}\/\d{2}\/\d{4}]"同样是字符类,完全不是你想要的日期格式。
另外,原代码中Final_file = File["Date"]得到的是Series而非DataFrame,后续Final_file["Date"]会引发索引错误,需要修正。
正确正则实现代码
要精准替换日期中的.为/(不影响其他可能的.),可以用正则捕获组保留需要的部分,仅替换目标符号:
import pandas as pd import datetime as dt # 读取文件 df = pd.read_excel("dotcharacter.xlsx") # 正则替换:捕获日期段和年份,将中间的.替换为/ df["Date"] = df["Date"].replace(r"(\d{2}/\d{2})\.(\d{4})", r"\1/\2", regex=True) # 可选:转换为datetime类型再格式化(确保日期格式严格统一) df["Date"] = pd.to_datetime(df["Date"]).dt.strftime("%m/%d/%Y") # 保存结果(index=False避免写入多余索引列) df.to_excel("modified_file.xlsx", index=False)
正则逻辑解释
r"(\d{2}/\d{2})\.(\d{4})":(\d{2}/\d{2}):捕获组1,匹配两位数字+斜杠+两位数字(比如11/13)\.:转义后匹配字面意义的.(正则中.默认是通配符,必须转义)(\d{4}):捕获组2,匹配四位数字的年份(比如2015)
r"\1/\2":替换时引用捕获组内容,将捕获组1 + / + 捕获组2拼接,实现.到/的替换。
内容的提问来源于stack exchange,提问作者Nani
相关产品推荐
相关产品推荐

