Вы можете избежать совпадения запятой между цифрами при использовании шаблона, если добавите (?<!\d,(?=\d))
lookbehind:
r'[^\s0-9a-zA-Z](?<!\d,(?=\d))'
^^^^^^^^^^^^^^
См. Демонстрационную версию regex
Короче говоря, [^\s0-9a-zA-Z]
соответствует любому символу, кроме пробелов и букв или цифр ASCII.При поиске (?<!\d,(?=\d))
совпадение не выполняется, если непосредственно слева от текущего местоположения есть цифра, ,
, и непосредственно справа от ,
есть цифра.Предварительный просмотр внутри lookbehind необходим для того, чтобы убедиться, что запятая «сопоставлена» в lookbehind только с шаблоном [^\s0-9a-zA-Z]
.
Кроме того, есть способ выполнить эту проверку перед сопоставлением отрицательного класса символов, если выиспользуйте (?<!\d(?=,\d))[^\s0-9a-zA-Z]
, см. демо .Однако такой подход намного дороже, так как внешний вид не «привязан» ни к какому тексту или утверждению нулевой ширины.