Python 在字符串开头标识日期

Python 在字符串开头标识日期,python,regex,date,Python,Regex,Date,我的字符串开头有日期。我想从字符串中删除日期 日期可能有多种格式,我以前不知道(无论如何,我可以决定手动选择更常见的格式,如dd-mm-yyy、dd-mm、dd/mm等) 我需要提取并存储日期之后的子字符串 示例: 例如,我有以下句子和desidera输出: 2019年1月2日英国首相->英国首相 2019年1月2日英国首相->英国首相 2019年1月2日英国首相->2019年1月2日英国首相 2019年1月2日18:52:02英国首相->英国首相 我认为正则表达式可能是一个不错的选择,但实际上

我的字符串开头有日期。我想从字符串中删除日期

日期可能有多种格式,我以前不知道(无论如何,我可以决定手动选择更常见的格式,如dd-mm-yyy、dd-mm、dd/mm等)

我需要提取并存储日期之后的子字符串

示例

例如,我有以下句子和desidera输出:

2019年1月2日英国首相->英国首相

2019年1月2日英国首相->英国首相

2019年1月2日英国首相->2019年1月2日英国首相

2019年1月2日18:52:02英国首相->英国首相


我认为正则表达式可能是一个不错的选择,但实际上我无法理解正则表达式的问题。也欢迎其他方法

您可以使用此正则表达式删除您提到的各种日期格式

^(?:\d{2}[/-]){2}\d{4}(?:\s+(?:\d{2}:){2}\d{2}\b)? 

如果您想支持更多的格式,比如
2019-10-22
where year cost first,您可以使用此增强的正则表达式

^(?:\d{2,4}[/ -]){2}\d{2,4}(?:\s+(?:\d{2}:){2}\d{2}\b)? 

Python代码示例

import re

arr = ['02/01/2019 The UK prime minister','02-01-2019 The UK prime minister','The UK prime minister in 02/01/2019','02-01-2019 18:52:02 The UK prime minister','2019-01-02 The UK prime minister','2019/01/02 The UK prime minister','2019 01 02 The UK prime minister','2019-01-02 18:52:02 The UK prime minister','2019/01/02 18:52:02 The UK prime minister','2019 01 02 The UK prime minister']

for s in arr:
 print(s, '-->', re.sub(r'^(?:\d{2,4}[/ -]){2}\d{2,4}(?:\s+(?:\d{2}:){2}\d{2}\b)? ?', '', s))
印刷品

02/01/2019 The UK prime minister --> The UK prime minister
02-01-2019 The UK prime minister --> The UK prime minister
The UK prime minister in 02/01/2019 --> The UK prime minister in 02/01/2019
02-01-2019 18:52:02 The UK prime minister --> The UK prime minister
2019-01-02 The UK prime minister --> The UK prime minister
2019/01/02 The UK prime minister --> The UK prime minister
2019 01 02 The UK prime minister --> The UK prime minister
2019-01-02 18:52:02 The UK prime minister --> The UK prime minister
2019/01/02 18:52:02 The UK prime minister --> The UK prime minister
2019 01 02 The UK prime minister --> The UK prime minister

不需要用空字符替换来删除日期。我假设你的输入是一个列表。所以你可以试试这个:


如果格式发生变化,我认为最好的做法是提取每个非字母字符,直到它到达第一个字母字符。像
[^a-zA-z]+(.*)
这样的东西对你有用吗?太好了!如何在Python中使用它来用空字符替换日期?@AndreaM:添加了一些示例代码。如果您还有任何问题,请告诉我。2019年2月5日之类的日期如何?它似乎失败了,因为它期望第一个插槽有两位数字。你知道怎么修吗?@AndreaM:很容易修。如果您想允许甚至1位数字作为月或日,只需将
{2}
更改为
{1,2}
并将
{2,4}
更改为
{1,4}
我将其修改如下:^(?:\d{1,4}[/-]){1,2}\d{1,4}(?:\s+(?:\d{1,2}:){1,2}\d}\d{1,2}\d{b}。。。。我还修改了{1,4}中的{2,4}。你认为这是对的吗?
import re

mylist = ["02/01/2019 The UK prime minister",
          "02-01-2019 The UK prime minister",
          "The UK prime minister in 02/01/2019",
          "02-01-2019 18:52:02 The UK prime minister"]

for d in mylist:
    regex = re.search("[0-9\/\-\:\s]+(\w.*)",d)
    regex = regex.groups()[0]
    print (regex)