Поскольку за номером, который вы пытаетесь заменить, следует только закрывающая скобка )
, вы можете просто использовать это \d+(?=\s*\))
регулярное выражение и заменить его на 100
или любое другое значение, которое вы хотите. Попробуйте эти коды Python,
import re
string = 'function(true, 0, 15)'
regex = re.compile(r'\d+(?=\s*\))')
res = re.sub(regex, '100', string)
print(res)
печать
function(true, 0, 100)
Кроме того, причина, по которой ваш код работает не так, как ожидалось, и заменяет всю вашу строку на 100
, потому что способ, которым вы написали свое регулярное выражение, соответствует всему вводу, а функция re.sub
заменяет все совпадает со вторым аргументом и, следовательно, все ваши входные данные заменяются на 100
. Но вместо этого вам нужно просто заменить третий аргумент на 100
, следовательно, способ, которым вы должны писать свое регулярное выражение, должен соответствовать только значению третьего аргумента, как показано в демонстрационной части регулярного выражения ниже,
Regex Demo соответствует только тому, что вы хотите заменить
И ваше текущее регулярное выражение соответствует всему вашему вводу, как показано в демонстрационном примере ниже,
Regex Demo с вашим регулярным выражением, совпадающим со всем вводом
Кроме того, если вы чувствуете себя лучше и хотите сопоставить весь ввод, а затем выборочно заменить только третий аргумент, вы можете использовать это регулярное выражение для захвата имени функции и первых двух параметров в group1, как вы хотели захватить в исходном регулярном выражении.
(function\([a-zA-Z]*, [0-9]*, )[0-9]*\)
и замените его на \g<1>100)
, где \g<1>
ссылается на значение, захваченное в группе1, и далее оно заменяется на 100)
Regex Demo с полным совпадением и выбранной заменой