【发布时间】:2020-04-22 16:40:32
【问题描述】:
注意 - 这个问题可能看起来类似于 this 或 this 或 this,但它们都没有完全解决我的问题。
我想从包含此日期字符串的较大长度的字符串中删除可能的日期字符串。就像输入字符串是"13th June 2020 is the day to remember" 一样,输出将是"is the day to remember"。现在我已经尝试了这三个模块:
像这样:
import parsedatetime as pdt
from date_extractor import extract_dates as ed
from datetime import datetime as dt
from datefinder import find_dates as fd
cal = pdt.Calendar()
def check_date_parseddatetime(date_string):
date_parsed, parse_status = cal.parse(date_string)
#print(f"check_date_parseddatetime :: date_parsed : {date_parsed}")
def check_date_extractor(date_string, prec_=False):
try:
dt_parsed = ed(date_string)
#print(f"check_date_extractor :: dt_parsed : {dt_parsed}")
except Exception as e:
#print(f"check_date_extractor :: error")
pass
def check_datefinder(date_string, date_extract_result=(False, )):
datefinder_list = [str(m) for m in fd(date_string)]
#print(f"check_datefinder :: datefinder_list : {datefinder_list}")
这是字符串" 13 jun 19 : Once upon a time"的示例输出
由parseddatetime提供:
time.struct_time(tm_year=2020, tm_mon=6, tm_mday=13, tm_hour=16, tm_min=23, tm_sec=48, tm_wday=5, tm_yday=4, tm_isdst=0)
由date_extractor提供:
[datetime.datetime(2019, 6, 13, 0, 0, tzinfo=<UTC>)]
由datefinder提供:
[datetime.datetime(2019, 6, 13, 0, 0)]
使用它们的问题是它们可以很好地解析字符串中的确切日期,但它们仍然没有返回找到该日期的确切单词块。
这是我正在尝试的所有测试数据。日期解析工作得很好,但它们都没有返回任何匹配的字符串来提取这个解析的日期:
l = ['13 jun 19 : Once upon a time', '13-jun-19', '13JUN19', '13 dec 19', '13-dec-19', '13th june 2019', '13th december 2019', '13-06-19', '13.06.19', '13.6.19', '13.12.19', '13/06/19', '13/12/19', '12 jan 2009', '12 jan, 2009', 'jan 12 2009', 'jan 12, 2009', '12 january 2009', '12 january, 2009', 'january 12 2009', 'january 12, 2009', '01 12 2009', '12-01-2009', '12 - 01 - 2009', '12/01/2009', '12 / 01 / 2009', '12 /01 /2009', '12/ 01/ 2009', '12/ 01 /2009', '12 /01/ 2009', '12 01 2009', '12 1 2009', '13 01 2009', '12 21 2009', '15 1 2009', '2 15 2009', '01-12-2009', '01/12/2009', '12.01.2009', '01.12.2009', '13-Jun-18', '13 Jun 19', '13 Jun, 19', '13, Jun 19', 'bla13 bla 14, Jun 19 sdfhkjn jd 12', '18-Feb-2008', '18 - Feb - 2008', '18 -Feb -2008', '18- Feb- 2008', '18 -Feb- 2008', '18- Feb -2008', '13-Jun-18 , 18-Feb-08', 'june 20', 'Jul 01, 2019', 'Jul 01 2019', 'Aug 5 2019', '21 Jun 2019, 18:00', '6/12/19', '6/18', '29 DEC 19', '29-DEC-19', '29/12/19', '14J1-N19', '12/Jul/2019 12/Aug/2019 MEISHAN BRIDGE 06:00']
在所有情况下,所需的输出都是空字符串,除了这三种情况,除了日期之外还有额外的单词:
['13 jun 19 : Once upon a time', 'bla13 bla 14, Jun 19 sdfhkjn jd 12', '21 Jun 2019, 18:00', '12/Jul/2019 12/Aug/2019 MEISHAN BRIDGE 06:00']
以上三种情况的输出应该是:
[': Once upon a time', 'bla13 bla sdfhkjn jd 12', ', 18:00', ' MEISHAN BRIDGE 06:00']
我曾考虑为每种情况编写正则表达式,但稍后会引入更多日期测试用例(可能使用这些模块处理),因此为所有这些情况编写正则表达式以匹配更大的字符串将煞费苦心。如何在没有正则表达式的情况下实现这一点?是否有任何其他模块(或这三个模块中的任何一个)返回我们获取解析日期的完全匹配,从而可以帮助从更大的字符串中删除该部分?
【问题讨论】:
标签: python python-3.x string date