我想从文本中提取时间,无论它是什么格式。例如:这个
1)06/02/2009:周二早上大约上午8:30,在俄罗斯印古什的纳兹兰,一个简易爆炸装置(简易爆炸装置)放置在属于Isa Tochiyev上校的车辆下,共和党禁毒部门的个人安全负责人在警察与他的家人在莫斯科夫斯卡娅街上开车,杀害警察,伤害两名儿童并损坏车辆时爆炸。简易爆炸装置装满了100至200克炸药。
输出
08:30 am
Pattern p = Pattern.compile("(\\d{1,2}[.:]\\d{2}\\s?[AaPp]\\.?[Mm])");
Matcher m = p.matcher(str);
if(m.find())
{
System.out.println("The time is " + m.group(0));
}
任何人都可以帮助我,而不是给予序列化的投票.....
答案 0 :(得分:7)
你的正则表达式没有考虑到你的时间戳中可能有点分隔符;也不是AM / PM邮票中可能有点。
要匹配示例中的所有实例,请尝试:
\d{1,2}[.:]\d{2}\s?[AaPp]\.?[Mm]
修改强> OP为他的时间戳添加了一些额外的可能格式。要考虑到这些,请尝试:
\d{1,2}(?:[:.]\d{2}){1,2}(?:\s?[AaPp]\.?[Mm])?
此正则表达式寻找
的模式以一位或两位数字开头 然后是点或冒号的时间分隔符 然后是两位数 - 重复一次或两次(仅几分钟,或分钟+秒) 然后是一个可选空格,后跟AM或PM(两种情况),在A
后有或没有点