If your values can have any values, you may use a workaround splitting:
String s = "Paper size: A4Paper size: A3Paper size: A2";
String[] res = s.replaceFirst("^Paper size:\\s*", "") // Remove the first delimiter to get rid of the empty value
.split("Paper size:\\s*"); // Split
System.out.println(Arrays.toString(res)); // => [A4, A3, A2]
See an IDEONE demo
Or, you can match any text other than Paper size: and capture it with ([^P]*(?:P(?!aper size:)[^P]*)*):
String s = "Paper size: A4Paper size: A3Paper size: A2";
String pattern1 = "Paper size: ([^P]*(?:P(?!aper size:)[^P]*)*)";
Pattern ptrn = Pattern.compile(pattern1);
Matcher matcher = ptrn.matcher(s);
List<String> res = new ArrayList<>();
while (matcher.find())
res.add(matcher.group(1));
System.out.println(res); // => [A4, A3, A2]
See another IDEONE demo
The Paper size: ([^P]*(?:P(?!aper size:)[^P]*)*) is actually the same pattern as (?s)Paper size: (.*?)(?=Paper size: |\z), but an unrolled one, a much more efficient with longer inputs.
([A-Z]\d)An.s.replaceAll("^Paper size: ", "").split("Paper size: ").