在Python中编写这个正则表达式的更好方法

时间:2015-07-22 09:43:22

标签: 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)

是否可以用更短的方式编写这个正则表达式,或者可以' |'字符的使用方式比这更好吗?因为上面的regexps只是在'AM'和' PM'部分。我觉得使用这个正则表达式并不合适。

1 个答案:

答案 0 :(得分:4)

您可以使用

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

请参阅demo

比较你的两个选择:

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])

注意它们有多相似。我们只需为PMAM添加1个替代方案。可以使用与[PA]P匹配的字符类A来完成。

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

注意我会在此模式中使用不区分大小写的标记re.I(该模式将匹配pmPM然后)。