【发布时间】:2018-11-21 01:00:59
【问题描述】:
我必须在下面包含账单日期的短信中搜索到期日。
"Bill dated 27-May-18 for your airtel fixedline/broadband ID ##### has been sent at abc@abc.com from ebill@abc.com. Due amount: Rs 2,358.82, due date: 15-Jun-18"
可能有许多不同的短信,其中可能没有在短信中明确提及计费日期或到期日。所以之前,我们只是通过正则表达式寻找日期格式,
"((\d{4}|\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{4}|\d{2}))|((\d{4}|\d{2})-\d{2}-(\d{4}|\d{2}))|((\d{4}|\d{2})\/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\/(\d{4}|\d{2}))|((\d{4}|\d{2})\/(\d{3}|\d{2})\/(\d{4}|\d{2}))|([0-3][0-9]((st)|(nd)|(rd)|(th))((\s)?)(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))"
当只有到期日而没有账单日期时,它运作良好。但在上面的短信中,它总是返回账单日期而不是到期日。
我想找到一个解决方案,它总是会像上面的正则表达式一样返回日期,或者如果提到任何到期日期,那么它应该在到期日期旁边返回日期。
我看到的可能解决方案是
- 检查截止日期 -(截止日期:)
- 如果在到期日旁边找到返回日期 - (?
- else 2 not found 然后返回我使用上述正则表达式存在的任何日期格式
【问题讨论】:
-
给你
(?:.*duedate:\s*(15-Jun-18)|(otherdate)).*的影响延伸到两个世界neo。 -
使用this regex。如果文本跨越多行,您可能还想使用
RegexOptions.Singleline。请注意,您需要.*在第一个日期捕获模式的两端使用整个字符串。另外,仅供参考,您无需在 .NET 正则表达式中转义/。 -
@sln 感谢您的回复。我是正则表达式的初学者。你能请我,我怎样才能构造一个正则表达式,检查短信中是否存在“到期日期:”文本,在“到期金额:”旁边的其他返回日期旁边返回日期,我试过这个,(?(到期date: )((?
-
@wiktor,感谢您的回复。我是正则表达式的初学者。你能请我,我怎样才能构造一个正则表达式,检查短信中是否存在“到期日期:”文本,在“到期金额:”旁边的其他返回日期旁边返回日期,我试过这个,(?(到期date: )((?
-
@sln 我无法让你的正则表达式为我工作。你能详细点吗?它似乎更接近我需要的东西