【问题标题】:Regex to match a non numeric value or end of string in Python正则表达式匹配 Python 中的非数值或字符串结尾
【发布时间】:2015-04-02 14:34:16
【问题描述】:

我正在尝试将日期格式与正则表达式匹配。每个日期的示例是:

02 Apr 15
02 Apr 2015

我用来匹配第一个的正则表达式是:

re.compile("([0-9]{2}) ([A-Z][a-z]{2}) ([0-9]{2})")

第二个:

re.compile("([0-9]{2}) ([A-Z][a-z]{2}) ([0-9]{4})")

现在我遇到的问题是第二个日期将匹配第一个正则表达式,即使它包含 4 个数字而不仅仅是 2。我想在正则表达式中添加一个行尾,但有时有时间附加在它后面(即 4:32)。所以我想要做的是让第一个正则表达式匹配相应的日期,之后可能没有任何内容或后面有空格+东西。所以第一个应该匹配:

"02 Apr 15"
"02 Apr 15 5:23"

但不匹配:

"02 Apr 2015"
"02 Apr 2015 5:23"

它应该被其他正则表达式失败。因此,几乎唯一重要的值是前 3 个(dd Mmm YY 和 dd Mmm YYYY)。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您正在寻找的是单词边界,即:

    re.compile("\\b([0-9]{2}) ([A-Z][a-z]{2}) ([0-9]{2})\\b")
    

    这将确保在尝试匹配示例中的第一个日期时不匹配 4 位数年份。

    不过你应该考虑Python date parse routine

    【讨论】:

    • 太棒了!我现在将添加正则表达式代码,因为它遵循很多脚本的编写方式。不过,我肯定会更多地研究解析;如果它会使脚本更好,我会这样做。
    猜你喜欢
    • 2015-08-01
    • 2015-09-28
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多