You may use
re.sub(r'(?<=\d),(?=\d{1,2}(?!\d))', r'.', s)
See the regex demo.
Details
(?<=\d) - a digit must be right before the...
, - comma that should be followed with...
(?=\d{1,2}(?!\d)) - 1 or 2 digits (\d{1,2}) not followed with another digit ((?!\d)).
Python test:
import re
s="Euro Style = $12,345,67, US Style = $12,345,67, $1,234, $12,124,345,456 $0,89 $12,345,678"
print(re.sub(r'(?<=\d),(?=\d{1,2}(?!\d))', '.', s))
# => Euro Style = $12,345.67, US Style = $12,345.67, $1,234, $12,124,345,456 $0.89 $12,345,678
Note that in case your numbers are never glued to _ or letters, you may also use a little simpler regex with a word boundary:
(?<=\d),(?=\d{1,2}\b)
^^
See this regex demo.
Or even - if you do not care if there is a digit before , or not:
re.sub(r',(\d{1,2})\b', r'\1', s)
See this regex demo.
And finally, if you need to also change $12,212,12345678 to $12,212.12345678
re.sub(r',(\d{1,2}|\d{4,})\b', r'.\1', s)
See yet another regex demo.
The (\d{1,2}|\d{4,}) is an alternation group that matches either 1 or 2 digits or more than 4 digits, thus eliminating 3 digit chunks followed with a word boundary.
,(?=\d{2}\b)