你好,我有一个像这样的字符串:6-006.a9&&20130323^000~1-206&&20130329^000~1-208.2&&20130322^000
我想把日期拿出来。我有一个有效的解决方案,但我认为这很长:
String replace = pw.replace('&', '^');
String[] rrex = replace.split("\\^+");
for(String s:rrex)
{
if(s.matches("[0-9]{8}"))
{
System.out.println(s);
}
}
这段代码不是我想要的,我可以用正则表达式获取日期吗?
与String[] dates = pw.split(regex);
答案 0 :(得分:8)
您可以使用以下习语,迭代匹配:
String test = "6-006.a9&&20130323^000~1-206&&20130329^000~1-208.2&&20130322^000";
// ┌ look behind for "&&"
// | ┌ group 1: year
// | | ┌ group 2: month
// | | | ┌ group 3: day
// | | | | ┌ look ahead
// | | | | | for escaped "^"
Pattern p = Pattern.compile("(?<=&&)(\\d{4})(\\d{2})(\\d{2})(?=\\^)");
// initialize matcher
Matcher m = p.matcher(test);
// iterate matches
while (m.find()) {
// print matches formatted for each group
System.out.printf(
"Found: year %s / month %s / day %s%n",
m.group(1),
m.group(2),
m.group(3)
);
}
<强>输出强>
Found: year 2013 / month 03 / day 23
Found: year 2013 / month 03 / day 29
Found: year 2013 / month 03 / day 22
注意强>
> 12
或00
)或日期(例如> 31
,00
或无效日期索引进行验证)。 Pattern
之外验证,以避免混乱。Pattern
以接受可选的1位数日/月或2位数年份可能会使其混乱。 答案 1 :(得分:0)
通过string.split
功能。
String s = "6-006.a9&&20130323^000~1-206&&20130329^000~1-208.2&&20130322^000";
String parts[] = s.split("(?:^|\\^)[^&]*(?:&&|$)");
for(String i: parts)
{
if (!i.isEmpty())
{
String out[] = i.split("(?=.{4}$)|(?=.{2}$)");
System.out.println("Year : " + out[0] + " month : " + out[1] + " day: " + out[2]);
}
}
<强>输出:强>
Year : 2013 month : 03 day: 23
Year : 2013 month : 03 day: 29
Year : 2013 month : 03 day: 22