【问题标题】:python regex date format, finding date only in 2012 [duplicate]python 正则表达式日期格式,仅在 2012 年查找日期 [重复]
【发布时间】:2012-08-13 23:54:22
【问题描述】:

可能重复:
python regex, date format

我正在编写一个正则表达式来查找像“6 月 27 日”这样的所有日期

同时我只想要 2012 年的“6 月 27 日”,而不是其他任何一年

所以“2007 年 6 月 27 日”中的“6 月 27 日”不应该被找到,但正则表达式确实捕获了“6 月 27 日”

正则表达式如下,

((?<!\w)(january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)[\.]?\s{1,3}?((?<!(\d|:))(1[0-9]|2[0-9]|3[0-1]|0?[1-9])(st|nd|rd|th)?(?!(\d|\s{0,3}am|s\{0,3}pm|:)))(\s{0,2},?\s{0,2}(2012))?(?!(\d|\s{0,4},?\s{0,2}(1\d\d\d|200\d|2010|2011))))

如果我去掉“27th”中的“th”,则正则表达式有效,即它不会捕获日期字符串。

有人可以帮忙吗?

【问题讨论】:

  • 你能给我们一个输入和期望输出的例子吗?
  • 您当前的正则表达式比您所要求的要复杂得多 - 即它使用分组、查找其他内容等。您需要正则表达式匹配什么?
  • 同意。例如:当您可以匹配单词边界时,为什么要查找非单词字符?
  • feb 31th, 2007 怎么样?正则表达式是个坏主意。

标签: python regex date


【解决方案1】:

假设你所有的日期都在你给定的语法中,一个简单的正则表达式是:

/^([^\d\s]+?)\s*(\d+)[stndrh]+,\s*2012$/

第一个捕获组以语言或缩写形式捕获月份,第二个捕获组保存月份中的日期。

或者,如果您必须匹配长文本中的所有内容,请尝试以下操作:

/(?:([a-z]{3,9})\s*(\d{1,2})[stndrh]{2},\s*2012)/

相同的捕获,但正则表达式的限制性更强,因此它不会意外匹配不需要的结果。

【讨论】:

    猜你喜欢
    • 2012-06-20
    • 1970-01-01
    • 2018-07-11
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多