Я рекомендую это, если вы не разрабатываете исключительно для англоязычных пользователей:
[0-9]{1,2}((,|\.)[0-9]{1,10})?%?
Вы можете просто заменить 10 на 2, чтобы получить два десятичных знака.
Мой пример будет соответствовать:
15.5
5.4366%
1,43
50,55%
34
45%
Из-за того, что результат этого сложнее разыграть, но что-то вроде этого подойдет (Java Code):
private static Double getMyVal(String myVal) {
if (myVal.contains("%")) {
myVal = myVal.replace("%", "");
}
if (myVal.contains(",")) {
myVal = myVal.replace(',', '.');
}
return Double.valueOf(myVal);
}