代码之家  ›  专栏  ›  技术社区  ›  darkhorse

带时区的时间戳的理想正则表达式模式是什么?

  •  0
  • darkhorse  · 技术社区  · 6 年前

    2014-12-01 17:15:52
    2014-12-01 17:15:52.213121
    2014-12-01 17:15:52 Africa/Cairo
    2014-12-01 17:15:52.213121 Africa/Cairo
    

    都是有效的时间戳。换句话说,微秒的精度是可选的,时区也是可选的。时区可以看作是一个字符串。到目前为止,我有以下模式:

    r'^\d\d\d\d-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01]) (00|[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])*$'
    

    这只适用于存储所需的部分,即没有微秒精度和时区。我对如何处理这件事有点迷茫。

    我应该用吗 |

    谢谢你的帮助。

    注意:由于不可避免地会有人提出这个问题,我完全理解单靠正则表达式模式无法验证日期时间。我打算使用这个模式来分割字符串,并验证其中的每个部分,以确保时间戳是否有效。所以,请不要评论或回答提到这个细节。

    1 回复  |  直到 6 年前
        1
  •  1
  •   The fourth bird    6 年前

    您可以通过在正则表达式末尾添加两个可选的非捕获组来更新正则表达式,以匹配一个点和1+个数字,如 .213121 并用正斜杠匹配一个图案,如 Africa/Cairo 使用 \S 匹配任何非空白字符。

    如果 \ 匹配范围太广,可以指定 character class 列出所有允许的字符。

    (?:\.\d+)?(?: \S+\/\S+)?$

    updated regex

    请注意,此组 ([0-9]|[0-5][0-9])* 不需要量词,因此可以省略 *

    如果正斜杠前后的内容也可以包含空格,您也可以使用:

    (?:\.\d+)?(?: [^\r\n\/]+\/[^\r\n\/]+)?