Попробуйте это регулярное выражение ^(A|P)(\d+)(\w+?)(M|F)$
. Это будет работать, но некоторые условия:
1) Он не будет проверять действительность даты.
2) Вывод должен быть точно таким, как вы описали, в противном случае он можетошибка.
String str = "A10102012MikeM";
String p = "^([A|P])(\\d+)(\\w+?)(M|F)$";
Pattern pattern = Pattern.compile(p);
Matcher matcher = pattern.matcher(str);
if (matcher.find()){
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
System.out.println(matcher.group(4));
}
выход =
A 10102012 Mike M