Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串中删除可识别的日期_Python_Date_Python Dateutil - Fatal编程技术网

Python 从字符串中删除可识别的日期

Python 从字符串中删除可识别的日期,python,date,python-dateutil,Python,Date,Python Dateutil,作为输入,我有几个字符串包含不同格式的日期,如 彼得16:45喝茶 我的生日是1990年7月8日 7月11日星期六我会回家 我使用dateutil.parser.parse来识别字符串中的日期。 在下一步中,我想从字符串中删除日期。结果应该是 彼得晚上喝茶 我的生日在 我马上就回家 有没有一种简单的方法可以实现这一点?您可以使用re.findall方法查找日期,然后将其从字符串中拆分出来。 我认为下面链接中的代码可以解决您的问题 如果您定义了一个函数来验证字符串是否为日期,那么我们可以用一行代码

作为输入,我有几个字符串包含不同格式的日期,如

彼得16:45喝茶 我的生日是1990年7月8日 7月11日星期六我会回家 我使用dateutil.parser.parse来识别字符串中的日期。 在下一步中,我想从字符串中删除日期。结果应该是

彼得晚上喝茶 我的生日在 我马上就回家
有没有一种简单的方法可以实现这一点?

您可以使用re.findall方法查找日期,然后将其从字符串中拆分出来。 我认为下面链接中的代码可以解决您的问题


如果您定义了一个函数来验证字符串是否为日期,那么我们可以用一行代码来实现

from dateutil import parser

data = ['Peter drinks tea at 16:45', 'My birthday is on 08-07-1990', "On Sat 11 July I'll be back home"]

def is_valid_date(date_str):
    try:
        parser.parse(date_str)
        return True
    except:
        return False

new_list = [' '.join([w for w in line.split() if not is_valid_date(w)]) for line in data]
print(new_list)
# ['Peter drinks tea at', 'My birthday is on', "On I'll be back home"]
您可以使用选项dateutil.parser.parse:

结果:

[(datetime.datetime(2018, 7, 17, 16, 45), ('Peter drinks tea at ',)),
 (datetime.datetime(1990, 8, 7, 0, 0), ('My birthday is on ',)),
 (datetime.datetime(2018, 7, 11, 0, 0), ('On ', ' ', " I'll be back home"))]
当fuzzy_with_标记为true时,解析器返回一个datetime的元组和一个被忽略的标记的元组,其中已使用的标记被删除。您可以将它们重新连接成如下字符串:

>>> ['<missing>'.join(x[1]) for x in out]
['Peter drinks tea at ',
 'My birthday is on ',
 "On <missing> <missing> I'll be back home"]
我要指出的是,模糊解析逻辑的可靠性并不惊人,因为很难从字符串中仅找出有效的组件并使用它们。如果您将喝茶的人更改为名为April的人,例如:

>>> dt, tokens = parse("April drinks tea at 16:45", fuzzy_with_tokens=True)
>>> print(dt)
2018-04-17 16:45:00
>>> print('<missing>'.join(tokens))
 drinks tea at 
因此,我敦促大家注意这种方法,尽管我不能真正推荐一种更好的方法,但这只是一个很难解决的问题

def remove_dates(sentence):
"""remove the dates like Mar 30  2013"""
sentence = re.sub('(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}', ' ', sentence)
return sentence
测试:

“你好”

def remove_dates(sentence):
"""remove the dates like Mar 30  2013"""
sentence = re.sub('(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}', ' ', sentence)
return sentence
remove_dates(' good Mar 30 2013 day')