我的正则表达式从字符串中提取时间有什么问题?

时间:2015-12-22 19:11:05

标签: python regex

我试图想出一个正则表达式来从字符串中提取时间来构建应用程序。

这是我到目前为止所得到的。不知道我在这里做错了什么。

https://regex101.com/r/fC0lI5/1

我可以获得一些字符串但不是所有不同的变体。

    var cookieValue=$.cookie("nav");

    $('.nav.navbar-nav > li').on('click', function() {
        $.removeCookie("nav");
        $.cookie("nav", $('a',this).attr("id"), { expires: 7, path: '/' });
        var cookieValue = $.cookie("nav");
    });
    if(cookieValue)

{
    $('#' + cookieValue).removeClass('active');
    $('#' + cookieValue).parent().addClass('active');
}

我想要的是两个被捕获的小组。所以我知道第一组是([01]?[0-9]*:?[0-9]*[AP]M?)-([01]?[0-9]*:?[0-9]*[AP]M?) 8-8:30AM MON TUES THURS FRI 8-10:30AM MON TUES THURS FRI 8:30AM-10:30AM MON TUES THURS FRI 10:30AM-11:30AM MON TUES THURS FRI 10:30AM-11:30AM MON TUES THURS FRI 8AM-8:30AM 10-11PM 时间,后一组是FROM时间。

3 个答案:

答案 0 :(得分:5)

([01]?[0-9]+:?[0-9]*(?:[AP]M)?)-([01]?[0-9]+:?[0-9]*(?:[AP]M)?)
           ^^               ^^            ^^                 ^^

只需将AM组件设为可选。请参阅demo.Also制作第一部分+,否则它将匹配空字符串。

https://regex101.com/r/fC0lI5/2

答案 1 :(得分:5)

任一捕获组中的AM / PM都不是可选的

([01]?[0-9]+:?[0-9]*(?:[AP]M)?)-([01]?[0-9]+:?[0-9]*(?:[AP]M)?)

我认为我的比其他人更有效,因为其他人会允许(他们已经修复了他们)

8M-9M, which is not valid.

答案 2 :(得分:2)

正如其他答案所指出的,A和P不是可选的。此外,你的正则表达式将匹配其他字符串(如“:A-:A”或“98387899A-A”)。

这可行,并且会更加严格:

((?:[01]?[0-9]:)?[0-9]{1,2}(?:AM|PM)?)-((?:[01]?[0-9]:)?[0-9]{1,2}(?:AM|PM)?)

有关正则表达式语法的完整说明,请参阅the Python manual