Попробуйте создать 2 регулярных выражения:
void\s+\w+\(([^\)]+))
([A-Z]\w+)\s+\w+
Сопоставление группы 1 из первого даст вам:
Type1 t1, Type2 t2, int i
Запустите второе для этого вывода, и группа 1 будет:
Type
Если вы используете Java, вы можете быстро конвертировать с помощью:
Pattern p = Pattern.compile("(void\\s+\\w+\\s+\)(([^\\)]+))");
Pattern p2 = Pattern.compile("([A-Z]\\w+)(\\s+\\w+)");
Matcher m = p.matcher("input.....");
StringBuffer sb = new StringBuffer();
while(m.find()) {
Matcher m2 = p2.matcher(m.group(0));
StringBuffer sb2 = new StringBuffer();
while(m2.find()) {
m2.appendReplacement(sb2, "$1&$2")
}
m2.appendTail(sb2);
m.appendReplacement(sb, "$1("+sb2.toString()+")")
}
m.appendTail(sb);