我试图在Java中使用正则表达式在字符串中查找时间。这里的正则表达式:在Java中使用正则表达式查找12小时格式的时间
\d{1,2}?:\d\d(?)(am|pm)??
这应该寻找1位或2位,后跟一个冒号,两个数字,然后要么“是”或“PM”(大小写无关)。
它主要工作,但如果我在捕获组中包装整个正则表达式,我只会得到hh:mm。例如,“12:34 am”只返回“12:34”。没有“是”。
UPDATE:完整的代码示例
Pattern p = Pattern.compile("\\d{1,2}?:\\d\\d(?)(am|pm)??");
Matcher matcher = p.matcher("12:34AM");
Assert.assertTrue(matcher.find());
Assert.assertEquals("12:34AM", matcher.group());
任何人有任何想法,为什么?
您正在寻找在错误的组。尝试组0.下次,请发布[mcve],而不仅仅是您认为相关的位。猜你在做什么不是最佳 – Tibrogargan
为什么有这么多的问号?我是否错过了某些东西,或者这应该是'\ d {1,2}?:\ d \ d(am | pm)',或者am/pm是可选的\ d {1,2}:\ d \ d(am | pm)?' – 3ocene
@ 3ocene我不认为这是一个有效的正则表达式,因为它是无论如何。什么是“(?)”? – Tibrogargan