Python 使用正则表达式进行日期时间匹配

Python 使用正则表达式进行日期时间匹配,python,regex,string,datetime,Python,Regex,String,Datetime,我有日期时间字符串t1 'Sat 02 May 2015 19:54:36 +0530' 我想提取第一个和最后一个单词,即Sat和+0530。下面是我写的三个正则表达式的行为: (1) re.search(r'(\d{2})([^:]+)([:\d{2}]+)',t1) matches '02 May 2015 19:54:36' (2) re.search(r'(\d{2})([^:]+)([:\d{2}]{2})',t1) matches '02 May 2015 19:5' (3) re

我有日期时间字符串t1

'Sat 02 May 2015 19:54:36 +0530'
我想提取第一个和最后一个单词,即Sat和+0530。下面是我写的三个正则表达式的行为:

(1) re.search(r'(\d{2})([^:]+)([:\d{2}]+)',t1) matches '02 May 2015 19:54:36'
(2) re.search(r'(\d{2})([^:]+)([:\d{2}]{2})',t1) matches '02 May 2015 19:5'
(3) re.search(r'(\d{2})(.+)([\:\d{2}])',t1) matches '02 May 2015 19:54:36 +0530'
有人能解释一下2号和3号有什么问题吗?我认为所有这些都应该产生相同的结果

有人能解释一下2号和3号有什么问题吗

regex
(\d{2})([^:]+)([:\d{2}]{2})中的问题在第三组中使用字符类,即
([:\d{2}]{2})
,这意味着它将两次匹配这些字符中的任何一个
数字
{/code>,
。因此,它匹配
:5
,并停止。第三个也一样

您的第一个正则表达式
(\d{2})([^::]+([:\d{2}]+)
,因为您使用了
+
(不止一个)量词,因为它们位于字符类
[:\d{2}]
中,所以会消耗
:54:36

删除字符类您的第二个正则表达式将是
(\d{2})([^:]+(:\d{2}){2}
,这将很好地工作

有人能解释一下2号和3号有什么问题吗

regex
(\d{2})([^:]+)([:\d{2}]{2})中的问题在第三组中使用字符类,即
([:\d{2}]{2})
,这意味着它将两次匹配这些字符中的任何一个
数字
{/code>,
。因此,它匹配
:5
,并停止。第三个也一样

您的第一个正则表达式
(\d{2})([^::]+([:\d{2}]+)
,因为您使用了
+
(不止一个)量词,因为它们位于字符类
[:\d{2}]
中,所以会消耗
:54:36

删除字符类您的第二个正则表达式将是
(\d{2})([^:]+(:\d{2}){2}
,这将很好地工作


您的问题的标题与regex有关,但似乎您的问题实际上是关于如何从日期字符串中删除第一个和最后一个单词。在你的情况下,我个人不会使用正则表达式。相反,您可以简单地拆分空格上的字符串,并加入结果列表,省去第一个和最后一个元素:

In [1]: s = 'Sat 02 May 2015 19:54:36 +0530'

In [2]: ' '.join(s.split(' ')[1:-1])
Out[2]: '02 May 2015 19:54:36'
[1:-1]
将为您提供从第二个元素到(但不包括)最后一个元素的序列的所有元素(在本例中是由创建的字符串列表)


Regex不是解决你问题的“错误”方法,我的也不是“正确”。然而,我发现,在适用的情况下,字符串方法通常更适合这种工作,更易于阅读,并且不太容易出错。这至少是我的经验。

您的问题的标题与regex有关,但似乎您的问题实际上是关于如何从日期字符串中删除第一个和最后一个单词。在你的情况下,我个人不会使用正则表达式。相反,您可以简单地拆分空格上的字符串,并加入结果列表,省去第一个和最后一个元素:

In [1]: s = 'Sat 02 May 2015 19:54:36 +0530'

In [2]: ' '.join(s.split(' ')[1:-1])
Out[2]: '02 May 2015 19:54:36'
[1:-1]
将为您提供从第二个元素到(但不包括)最后一个元素的序列的所有元素(在本例中是由创建的字符串列表)


Regex不是解决你问题的“错误”方法,我的也不是“正确”。然而,我发现,在适用的情况下,字符串方法通常更适合这种工作,更易于阅读,并且不太容易出错。这至少是我的经验。

为什么不把它解析成日期对象,然后格式化日期对象?@J.N.你能给我举个例子吗?我是Python新手。谢谢。假设您使用的是Python 2:下面是如何将字符串解析为DateTime对象的方法:下面是如何格式化DateTime对象的方法:解析DateTime对象表示的日期和时间要比创建相对脆弱的正则表达式容易得多。@J.N.谢谢。为什么不将其解析为date对象,然后格式化日期对象?@J.N.你能给我举个例子吗?我是Python新手。谢谢。假设您使用的是Python 2:下面是如何将字符串解析为DateTime对象:下面是如何格式化DateTime对象:解析DateTime对象表示的日期和时间比创建相对脆弱的正则表达式容易得多。@J.N.谢谢。谢谢。我好像忘记了[]的目的:)。谢谢。我好像忘记了[]的目的:)。谢谢。我只是想用正则表达式解决这个问题。@Sumit明白了!我只是想把它放在那里以防万一对你有用。我记得当我第一次学习regex时,我对他们的力量感到敬畏,我想用他们做任何事情。在我的情况下,我花了一段时间才知道还有其他方法可以做事情,哈哈!真有趣。同意,正则表达式非常强大。谢谢。我只是想用正则表达式解决这个问题。@Sumit明白了!我只是想把它放在那里以防万一对你有用。我记得当我第一次学习regex时,我对他们的力量感到敬畏,我想用他们做任何事情。在我的情况下,我花了一段时间才知道还有其他方法可以做事情,哈哈!真有趣。同意,正则表达式是超级强大的。