Сохранить каждая цифра в его собственной saving group, ссылки на группы в вашей строке замены:
>>> import re
>>> s = "testing_7_3_4_testing"
>>> re.sub(r"(\d)_(\d)_(\d)", r"\1.\2.\3", s)
'testing_7.3.4_testing'
Или мы можем использовать функцию замены, которая, в отличие от первого подхода, а также обрабатывает переменное количество цифр в строке ввода:
>>> def replacement(m):
... x, y, z = m.groups()
... return x + y.replace("_", ".") + z
...
>>> re.sub(r"(.*?_)([0-9_]+)(_.*?)", replacement, s)
'testing_7.3.4_testing'
не-регулярное выражение подход предполагает Расщепление _
, нарезка и соединение:
>>> l = s.split("_")
>>> l[0] + "_" + ".".join(l[1:-1]) + "_" + l[-1]
'testing_7.3.4_testing'
Возможно, результаты странные, потому что вы используете JS-код в Python? –
Я также пробовал этот re.findall (r '[\ d_ \ d]', str), но он соответствует только первому набору «7_3», а не «7_3_4» – Rafthecalf