我试图在包含日期的DataFrame列中捕获和替换regex,我希望在文本“YYYY DD”中捕获以下日期格式--似乎我用于捕获和替换的语法是正确的,但有些方法是不工作的。
lst_date_version = ["2021-10-10 rev. 002", "2021-11-28 rev. 003", "2021-09-27 rev. 008","2021-11-29 rev. 008", "2021-10-16 rev. 003", "2021-10-25 rev. 008","2021-11-03 rev. 003", "2021-04-12 rev. 008", "2021-03-19 rev. 004"]
df_test_date = pd.DataFrame({"Version":lst_date_version})
df_test_date["Version"] = df_test_date["Version"].str.replace(r"(\d{4}-\d{2})-(\d{2})", r"\1", regex=True)
print(df_test_date["Version"])结果,日期格式的日期似乎被删除(2021-10-10 Rev.002 ==> 2021-10 Rev.002):
0 2021-10 rev. 002
1 2021-11 rev. 003
2 2021-09 rev. 008
3 2021-11 rev. 008
4 2021-10 rev. 003
5 2021-10 rev. 008
6 2021-11 rev. 003
7 2021-04 rev. 008
8 2021-03 rev. 004但当我做以下事情时:
df_test_date["Version"] = df_test_date["Version"].str.replace(r"(\d{4}-\d{2})-(\d{2})", r"\0", regex=True)
print(df_test_date["Version"])结果是:
0 rev. 002
1 rev. 003
2 rev. 008
3 rev. 008
4 rev. 003
5 rev. 008
6 rev. 003
7 rev. 008
8 rev. 004与此同时,我找到了与我想要实现的目标不同的方法(反转捕获):
df_test_date["Version"] = df_test_date["Version"].str.replace(r"(\srev.+)", r"\0", regex=True))非常感谢您的提前帮助:)
PS:根据备注修改了问题:)
发布于 2022-03-08 08:54:08
您的代码失败,因为(\d{4}-\d{2})-(\d{2})永远不匹配。
你可以用str.split和n=1
df_test_date['Version'] = df_test_date['Version'].str.split(n=1).str[1]否则,将正则表达式更改为\d{4}-\d{2}-\d{2}\s*
df_test_date['Version'] = df_test_date["Version"].str.replace(r"\d{4}-\d{2}-\d{2}\s*",
'', regex=True)发布于 2022-03-08 08:55:58
我会在这里使用str.extract:
df_test_date["Version"] = df_test_date["Version"].str.extract(r'^(\d{4}-\d{2}-\d{2})')如果要使用str.replace,则使用与整个输入匹配的模式:
df_test_date["Version"] = df_test_date["Version"].str.replace(r'^(\d{4}-\d{2}-\d{2}) rev\. \d+$', r'\1')https://stackoverflow.com/questions/71392278
复制相似问题