一些字符串:
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'部分。我觉得使用这个正则表达式并不合适。
答案 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])
注意它们有多相似。我们只需为PM
或AM
添加1个替代方案。可以使用与[PA]
或P
匹配的字符类A
来完成。
而不是[0-9]
,您可以使用简写类\d
(它有点短:),并且不要忘记将正则表达式声明为原始字符串r'...'
)。
注意我会在此模式中使用不区分大小写的标记re.I
(该模式将匹配pm
和PM
然后)。