用Python编写此正则表达式的更好方法

用Python编写此正则表达式的更好方法,python,regex,Python,Regex,一些字符串: s = 'some text some text date may 04 at 05 AM some text some text' 我已经编写了正则表达式以从上面提取日期,如下所示: m = re.search(r'date ([a-z]{3} [0-9]{2}) at ([0-9]{2}) ([P][M])|date ([a-z]{3} [0-9]{2}) at ([0-9]{2}) ([A][M])', s) 可以用更短的方式编写这个正则表达式吗?或者可以用比这个更好的方

一些字符串:

s = 'some text some text date may 04 at 05 AM some text some text'
我已经编写了正则表达式以从上面提取日期,如下所示:

m = re.search(r'date ([a-z]{3} [0-9]{2}) at ([0-9]{2}) ([P][M])|date ([a-z]{3} [0-9]{2}) at ([0-9]{2}) ([A][M])', s)
可以用更短的方式编写这个正则表达式吗?或者可以用比这个更好的方式使用“|”字符吗?因为上述正则表达式仅在“AM”和“PM”部分不同。我觉得用这个正则表达式不合适。

你可以用

date ([a-z]{3} \d{2}) at (\d{2}) ([PA]M)

比较您的两个备选方案:

date ([a-z]{3} [0-9]{2}) at ([0-9]{2}) ([P][M])
date ([a-z]{3} [0-9]{2}) at ([0-9]{2}) ([A][M])
注意它们是多么相似。我们只需要为
PM
AM
添加一个备选方案。可以使用与
P
a
匹配的字符类
[PA]

您可以使用速记类
\d
(它稍微短一点:),而不是
[0-9]
,并且不要忘记使用
r'.'将正则表达式声明为原始字符串。

注意:我将使用不区分大小写的标志
re.I
(该模式将同时匹配
pm
pm

您可以使用

date ([a-z]{3} \d{2}) at (\d{2}) ([PA]M)

比较您的两个备选方案:

date ([a-z]{3} [0-9]{2}) at ([0-9]{2}) ([P][M])
date ([a-z]{3} [0-9]{2}) at ([0-9]{2}) ([A][M])
注意它们是多么相似。我们只需要为
PM
AM
添加一个备选方案。可以使用与
P
a
匹配的字符类
[PA]

您可以使用速记类
\d
(它稍微短一点:),而不是
[0-9]
,并且不要忘记使用
r'.'将正则表达式声明为原始字符串。


注:我将使用一个不区分大小写的标志
re.I
(该模式将同时匹配
pm
pm

1st thaught`在字符类中使用
是一个常见的错误<代码>[A | P]匹配
A
P
。是。你是对的。谢谢请忽略我的评论:)第一个想法`在字符类中使用
是一个常见的错误<代码>[A | P]匹配
A
P
。是。你是对的。谢谢请忽略我的评论:)