Я пытаюсь прочитать текстовый файл, не важно, на каком языке ...
$x = [IO.File]::ReadAllText("__init__.py")
... найти строку
$pattern = [regex] '(?s)(?:ExportSTL.+?global_scale = .+?default=)(.+?),'
... и замените группу захвата ( (.+?)
) другой строкой (например 10.0
). Затем запишите в файл и закройте его.
Как я могу попасть в группу захвата таким образом, чтобы я мог изменить ее на месте и сохранить файл? Все мои попытки заменить всю согласованную линию на группу без захвата.
Ответы:
Попробуйте создать позитивную группу за исключением группы без захвата:
Требуется совпадение с группой lookbehind, но она не будет использовать никаких символов.
Строка замены будет просто
'10.0'
.Менее экзотическим способом было бы превратить не захватывающую группу в нормальную группу:
Строка замены будет
'${1}10.0'
(с одинарными кавычками). The${1}
представляет первую группу. (Вам нужны фигурные скобки вокруг «1», чтобы он не попадал в «10.0».)источник
${1}
работают, это то, чего мне не хватало.1 --- 1.0
и0 --- 1.0,
. Я не могу заставить его заменить, хотя.-replace $pattern, '10.0'
изменяет все экземплярыdefault=something
, вместо того , чтобы просто1.0
'123abc' -replace '(?<=123)(abc)','xxx'
он заменяет «abc» на «xxx». Если вы измените «123» в исходной строке, замена не произойдет. (Но в любом случае, я думаю, что второй способ с$1
заменой, вероятно, лучше, потому что больше людей поймут это.)Решение
Благодаря @dangph , вот сценарий с его предложением.
Обновленный Regex101
источник