【发布时间】:2017-07-13 12:11:59
【问题描述】:
我需要使用 Python 3.4 从 SMS 中找出电话账单到期日我使用过 dateutil.parser 和 datefinder,但根据我的用例没有成功。
示例:sms_text = "您的 2017 年 6 月 72.23 卢比的电话账单已发送至您的 regd 电子邮件 ID abc@xyz.com。请检查收件箱"
代码 1:
import datefinder
due_dates = datefinder.find_dates(sms_text)
for match in due_dates:
print(match)
结果:2017-07-17 00:00:00
代码 2:
import dateutil.parser as dparser
due_date = dparser.parse(sms_text,fuzzy=True)
print(due_date)
结果:ValueError 可能是因为文本中有多个日期
如何从此类文本中选择截止日期?日期格式不固定,但文本中有 2 个日期:一个是生成账单的月份,另一个是到期日,顺序相同。即使我得到一个正则表达式来解析文本,那也很棒。
更多示例文本:
- 您好!您的电话未结帐款是 293.72 到期日是 7 月 3 日。
- 219 卢比的日期为 219 年 6 月 6 日的账单今天到期,您的电话号码为 1234567890
- 17 年 6 月 6 日 219 卢比的账单将于 7 月 5 日到期,您的电话号码为 1234567890
- 2017 年 6 月 27 日您的运营商固网/宽带 ID 1234567890 的账单已从 xyz@abc.com 发送至 abc@xyz.com。到期金额:3,764.53 卢比,到期日期:17 年 7 月 16 日。
- 2017 年 6 月 21 日电话号码账单的详细信息。 1234567890:到期总额:374.12 卢比,到期日:2017 年 7 月 9 日,账单交付日期:2017 年 6 月 25 日,
- 您好!您的手机账单 1234567890,2017 年 6 月 18 日,付款到期日 2017 年 7 月 6 日已发送至 abc@xyz.com
- 尊敬的客户,您的电话账单 191.24 卢比应于 2017 年 6 月 25 日到期
- 嗨!你的电话费卢比。 560.41 将于 2017 年 3 月 7 日到期。
【问题讨论】:
-
如果你的字符串这么简单,你可以使用正则表达式。
-
@cᴏʟᴅsᴘᴇᴇᴅ 我很想先生...字符串很简单,但日期格式可能会有所不同。另外,我对正则表达式不是很好。如果结果是提取到期日期,那么正则表达式对我来说也是完美的。
-
当你说我警惕的日期格式时,这会敲响一些警钟。您会遇到哪些可能的日期格式?有一个正则表达式适用于一种格式但不适用于其他所有格式是没有意义的。
-
到期日可以是:YYYY-MM-DD、DD-MM-YYYY、MMMMD、DDMMM。账单月份可以是:MMM-YY、MMM'YY、MMM YYYY。这些是我遇到的几个例子。由于格式不固定,我试图使用可以检测不同日期格式的 Python3.x 实用程序来解决它
-
我很抱歉。我不确定正则表达式能否处理这么多格式。
标签: python python-3.x date