Использовать этот синтаксис для (необязательная_подгруппа)? , т. Е. Вкладывать в другую пару скобок '(...)' и добавлять '?'
В вашем случае целая целая часть (\d{1,3}(\,\d{3})*|(\d+))
является необязательной. Следовательно
((\d{1,3}(\,\d{3})*)|(\d+))?(\.\d{2})?$
Однако теперь это будет соответствовать абсолютно пустым выражениям, то есть 0 целых и 0 десятичных цифр.
Поэтому нам необходимо либо хотя бы 1 целое число (+ необязательная десятичная часть) ...
((\d{1,3}(\,\d{3})*)|(\d+))(\.\d{2})?
или не менее 2 десятичных цифр (+ необязательная целочисленная часть)) ...
((\d{1,3}(\,\d{3})*)?|(\d+))(\.\d{2})
Так что сопоставьте любой из этих двух (INTEGER)(DECIMAL)?|(INTEGER)?(DECIMAL)
- мы могли бы сжать ваше регулярное выражение, если вы сообщите нам больше.
В качестве альтернативы постобработать совпадение (в ASP), чтобы отклонить регистр 0 целых + 0 десятичных цифр. (Вы можете опубликовать этот фрагмент ASP?)
Не соответствует десятичной запятой само по себе. Вам решать, допустите ли вы одну десятичную цифру: .1