我在正则表达式方面有点入门,我的问题是:
我今天晚些时候在5am
午休。
我今天晚些时候在5 am
午休。
应该考虑的情况是在数字和am
之间有一个空格,没有空格。
在第一个和两个示例中,我想要的值是 5
.
编辑:我尝试过但没有奏效:
import re
value = re.findall('/([1-9]|1[012]) ?[ap]m/','I have a lunch break at 5am later today.')
print value
试试这个:
import re
value = re.search('((1[012]|[1-9])s?(am|pm))','I have a lunch break at 5 pm later today.').group().replace('pm','').replace('am','')
print(value)
简介
Python 不需要指定正则表达式分隔符。您当前在 python 中的正则表达式字符串是 '/([1-9]|1[012]) ?[ap]m/'
.虽然这并非不正确,但所使用的分隔/
符实际上是在 python 中按字面意思获取的:也就是说,它实际上试图在字符串中查找/
,以便格式匹配 - 例如 - /1 am/
而不是1 am
。
法典
在此处查看正在使用的代码
import re
r = r"([1-9]|1[012]) ?[ap]m"
s = 'I have a lunch break at 5am later today.'
value = re.findall(r, s, re.I)
print value
像这样的正则表达式可能适合您:
/([1-9]|1[012]) ?[ap]m/
(( 表示提取这部分,在 [] 中我们指定我们想要的目标, * 匹配前面表达式的 0 次或多次出现。
import re
s = re.findall('([0-9 ]*)am' , '5am 5 am 12 am 12am')
for x in s:
print(x.strip())