Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Timestring正则表达式:请简化它,并说明如何删除冒号?_Python_Regex - Fatal编程技术网

Python Timestring正则表达式:请简化它,并说明如何删除冒号?

Python Timestring正则表达式:请简化它,并说明如何删除冒号?,python,regex,Python,Regex,我已经编写了一个正则表达式来解析系统日期和时间,我可以用这个脚本捕获所有内容(我知道有一些模块可以解析日期,这只是为了学习正则表达式) 目标: 获取组中所有单个元素的步骤 问题: 如何使正则表达式更简单(如果有任何方法) 我怎么能简单地从正则表达式中删除冒号(就像我根本不想被捕获一样) 以下是我的输出: Sun Oct 14 13:47:03 CEST 2012 Sun Oct 14 13 : 47 : 03 CEST 2012 解决方案:只要不在匹配冒

我已经编写了一个正则表达式来解析系统日期和时间,我可以用这个脚本捕获所有内容(我知道有一些模块可以解析日期,这只是为了学习正则表达式)

目标:

获取组中所有单个元素的步骤

问题:

  • 如何使正则表达式更简单(如果有任何方法)

  • 我怎么能简单地从正则表达式中删除冒号(就像我根本不想被捕获一样)

  • 以下是我的输出:

    Sun Oct 14 13:47:03 CEST 2012  
    Sun  
    Oct  
    14  
    13  
    :  
    47  
    :  
    03  
    CEST  
    2012
    

    解决方案:只要不在匹配冒号的组周围加括号,它们就不会显示为捕获组:

    >>> x = r"([A-Za-z]+\b)\s([A-Za-z]+\b)\s(\d\d)\s(\d\d)[/:](\d\d)[/:](\d\d)\s([A-Za-z]+\b)\s(\d\d\d\d)"
    >>> re.search(x,s).groups()
    
    ('Sun', 'Oct', '14', '13', '47', '03', 'CEST', '2012')
    
    但是如果你真的想简化这个大正则表达式,看起来你可以简单地在空格或冒号上拆分正则表达式,完全避免使用大正则表达式:

    >>> re.split(r'[ :/]', s)
    
    ['Sun', 'Oct', '14', '13', '47', '03', 'CEST', '2012']
    

    如果在语句周围加上括号,它将成为一个“捕获组”。
    要防止出现这种情况,请不要放置括号,或创建非捕获组:

    (?:[a-z]*)
    
    然而,我的解决办法是:

    ([A-Za-z]+)\s([A-Za-z]+)\s(\d\d)\s(\d\d)[/:](\d\d)[/:](\d\d)\s([A-Za-z]+)\s(\d{4})
    
    注意,我删除了单词边界,因为它们是不相关的,因为它们前面的条件只是字母表,后面跟一个空格字符


    我还取消了冒号的包装,并在最后一条语句中指定了位数,使用
    {4}

    我确信python已经有了解析日期的库。“没有必要用正则表达式重新发明它们。”我知道,但我正在努力学习正则表达式并练习。你能帮忙吗?@Fenomatik like Hunter说,用time&date函数解析,然后用你喜欢的任何字符串格式写出来,会更容易、更易于维护。你真的还想写一个原始正则表达式,只是为了学习正则表达式吗?
    我不想:被捕获
    -那你为什么明确要求捕获它呢?@smci,你认为用解析日期和时间来学习正则表达式是个坏主意吗?另外,你可以试试这个
    ([a-Za-z]+)\s([a-Za-z]+)(?:\s(\d\d)){2}([/:](\d\d)){2}\s([A-Za-z]+\s(\d{4})
    ,但我不知道它是否能正确地将它分成几个组。我试着简单地说,你认为它现在看起来更好了?x=r“(\s+\b)\s(\s+\b)\s(\d{2})\s(\d{2})[/:](\d{2})[/:](\d{2})\s(\s+\b})s(\d{4})”它更简单,但在那里更容易得到不好的数据,像是非字符的意思♥.没有办法简单地避免它?(不将其添加到正则表达式,甚至不编写非捕获组)
    ([A-Za-z]+)\s([A-Za-z]+)\s(\d\d)\s(\d\d)[/:](\d\d)[/:](\d\d)\s([A-Za-z]+)\s(\d{4})