我写了正则表达式来捕获HH:MM AM / PM / am / pm但它无法提取确切的模式
正则表达式代码:
import re
def replace_entities(example):
res = ''
# TIME
m = re.findall("\d{2}:\d{2} (:?AM|PM|am|pm)", example)
if m:
for id in m:
res = res +"\n{} :TIMESTR".format(id)
m = re.findall("\d{2}:\d{2}:\d{3} (:?AM|PM|am|pm)", example)
if m:
for id in m:
res = res +"\n{} :TIMESTR".format(id)
print(replace_entities('My name is sayli, Todays time is 12:10 PM Date is 21/08/2018 otal amount is www.amazon.com chandanpatil@yahoo.com euros 10,2018/13/09 saylijawale@gmail.com. https://imarticus.com Account number is Accountsortcode:abca123456'))
但我不能把时间作为TIMESTR的时间下午12:10捕获
试用过的正则表达式的链接。https://regex101.com/r/Z8lUIW/2 我该如何纠正?任何建议。请帮助
答案 0 :(得分:0)
试试这个:
\s(\d{2}\:\d{2}\s?(?:AM|PM|am|pm))
说明:
\s
匹配任何空格字符(等于[\ r \ n \ t \ f \ v])第一次捕获
\d{2}
匹配一个数字(等于[0-9]){2}量词 - 恰好匹配2次
\:
匹配字符:字面意思(区分大小写)
\d{2}
匹配一个数字(等于[0-9]){2}量词 - 恰好匹配2次
\s?
匹配任何空格字符(等于[\ r \ n \ t \ f \ v])0次或更多次
非捕获组(?:AM|PM|am|pm)
第一个替代AM AM
字面匹配字符AM
(区分大小写)第二个替代PM
第三个替代am
第四个替代pm
行动中:
>>> import re
>>> re.findall(r'\s(\d{2}\:\d{2}\s?(?:AM|PM|am|pm))', 'Time today is 10:30 PM')
['10:30 PM']