Что нового

[Данные, строки] Замена текста между заданными словами

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Добрый день. Наверно вопрос этот не новый, но к сожалению ответа на форуме не нашёл. Есть очень хорошая команда _StringBetween, которая возвращает значения между начальной и конечной строчкой. В общем нужна команда, которая будет заменять значение между начальной и конечной строкой.
Пример: начало "REQUESTDIGEST" конец "&"
соответственно без кавычек.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
$vTest = '... REQUESTDIGEST_OldData_&...'

MsgBox(64, 'Title', $vTest)
$sRet = StringRegExpReplace($vTest, '^(.*REQUESTDIGEST)(.*?)(&.*)', '\1_NewData_\3')
MsgBox(64, 'Title', $sRet)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Если REQUESTDIGEST находится где нибудь в начале строки то лучше паттерн заменить на
^(.*?REQUESTDIGEST)(.*?)(&.*)
Так меньше backtrack будет.
 
Автор
D

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Это решение конечно хорошее на один раз, но нужна универсальная функция подобная _StringBetween, чтобы не надо было каждый раз ломать голову в куче этих закорючек. Задал начало, конец и не надо было каждый раз шаманить.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Но быстрее вот так будет:
Код:
$OldData='... REQUESTDIGEST_OldData_&...'
$sRet=StringRegExpReplace($OldData,'\QREQUESTDIGEST\E[^&]+&','REQUESTDIGEST _NewData_ &')
MsgBox(64, 'Title', $sRet)



Добавлено:
Сообщение автоматически объединено:

Dellroc [?]
но нужна универсальная функция
Есть такая ;D
Код:
$OldData='... REQUESTDIGEST_OldData_&...'
$sRet= _SupperPupper($OldData,'REQUESTDIGEST','&',' new data ')
MsgBox(64,'Title',$sRet)

Func _SupperPupper($sString,$sStart,$sEnd,$sNewData)
	Return StringRegExpReplace($sString,'\Q'&$sStart&'\E.*?\Q'&$sEnd&'\E',$sStart&$sNewData&$sEnd)
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Dellroc [?]
нужна универсальная функция подобная _StringBetween
Ну а в чём проблема её же и использовать?

Код:
#include <String.au3>

$vTest = '... REQUESTDIGEST_OldData_&...'
$aBetween = _StringBetween($vTest, 'REQUESTDIGEST', '&')
$sRet = StringReplace($vTest, $aBetween[0], '_NewData_')
MsgBox(64, 'Title', $sRet)
 
Верх