anythinging 发表于 2020-1-27 20:39:28

【已解决】关于替换或删除文件中的部份字符的问题

本帖最后由 anythinging 于 2020-2-4 12:12 编辑

各位大神,我想替换password 51:b:开始到后面的字符,大致知道应该用正则表达式来替换或删除,但目前还没有掌握,肯请指点替换和删除的方法(感觉可能先删除,再添加比较容易),谢谢!
这个是rdp文件,
文件名是default.rdp
文件中需要修改替换的内容:

password 51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB010000000766BE1F58CCA44082BCC46C1A155B5A00000000020000000000106600000001000020000000DA6D8FE678773CE6C70D5B9A8DEBA5A721A0DF1423AC4623DB3E664BB290DFE5000000000E8000000002000020000000A35773E38EAC800BCA8AD6B6B86C683CA0DE054A11C51CF80875092B01C2CA7E2000000067BE91888738802AE683E91F3DCBCD4630B421CB31AC062405DF5171C387C4A0400000001F875ADDCF475F720C31A16C41E3E39F308DC329F48A32BA59C3127D163977E90EA37B30DCF73F7642626F59A8DC3673A051973B5AE697A3E0011413812EC12B

floor6ggg 发表于 2020-2-1 20:16:23

Local $sSRERe = StringRegExpReplace($sSource, 'password.*\v+', '')

Local $sSRERe = StringRegExpReplace($sSource, 'password.*\v{2}', '')

都可以,自己看着调整吧

zghwelcome 发表于 2020-1-28 15:47:01

Local $sSRERe = StringRegExpReplace($sSource, '(?is)(^.*51:b:)(.*)', '${1}' & $password)

Local $sSRERe = StringRegExpReplace($sSource, '(?im)(^.*51:b:)(.*)', '${1}' & $password)

zghwelcome 发表于 2020-1-28 13:26:52


$sSource=FileRead(@desktopDir&"\default.rdp");假设存放路径在桌面;替换文件中的password 51:b:后的内容
MsgBox(262144, '原文内容', $sSource)

$file=FileOpen(@desktopDir&"\default.rdp", FileGetEncoding(@desktopDir&"\default.rdp") + 2);2 = 写入模式(先删除之前的内容)

$password = '12345678'
Local $sSRERe = StringRegExpReplace($sSource, '(?is)(^.*51:b:)(.*)', '${1}' & $password)
MsgBox(262144, '更改结果', $sSRERe)

FileWrite($file,$sSRERe)
FileClose($file)


floor6ggg 发表于 2020-1-27 22:10:22

不知道我理解的对不对?    将红色的全部删除?

password 51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB010000000766BE1F58CCA44082BCC46C1A155B5A00000000020000000000106600000001000020000000DA6D8FE678773CE6C70D5B9A8DEBA5A721A0DF1423AC4623DB3E664BB290DFE5000000000E8000000002000020000000A35773E38EAC800BCA8AD6B6B86C683CA0DE054A11C51CF80875092B01C2CA7E2000000067BE91888738802AE683E91F3DCBCD4630B421CB31AC062405DF5171C387C4A0400000001F875ADDCF475F720C31A16C41E3E39F308DC329F48A32BA59C3127D163977E90EA37B30DCF73F7642626F59A8DC3673A051973B5AE697A3E0011413812EC12B


$sSource=FileRead(@desktopDir&"\default.rdp");假设存放路径在桌面
MsgBox(0, '原文内容', $sSource)

$file=FileOpen(@desktopDir&"\default.rdp",2);2 = 写入模式(先删除之前的内容)
Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1')
FileWrite($file,$sSRERe)
MsgBox(0, '替换结果', $sSRERe)
;~ ConsoleWrite($sSRERe)
FileClose($file)

anythinging 发表于 2020-1-27 22:30:23

本帖最后由 anythinging 于 2020-1-27 22:32 编辑

感谢回复,我按您的代码改了一下,好象没有效果。
我想把password 51:b:之后的这一行内容替换成新的密码内容比如$password。

$password = '12345678'

$sSource=FileRead(@ScriptDir&'\密码.rdp');假设存放路径在桌面
MsgBox(0, '原文内容', $sSource)

$file=FileOpen(@ScriptDir&'\密码.rdp',2);2 = 写入模式(先删除之前的内容)
Local $sSRERe = StringRegExpReplace($sSource, '(.51b)(.)', '1')
FileWrite($file,$sSRERe)
MsgBox(0, '替换结果', $sSRERe)
;~ ConsoleWrite($sSRERe)
FileClose($file)
比如
password 51:b:12345678

floor6ggg 发表于 2020-1-27 23:08:25

本帖最后由 floor6ggg 于 2020-1-27 23:18 编辑

anythinging 发表于 2020-1-27 22:30
感谢回复,我按您的代码改了一下,好象没有效果。
我想把password 51:b:之后的这一行内容替换成新的密码内 ...
意思是将 我2楼标红色的部分,替换成 12345678 对吧?

如果是我的解法的话,个人会沿用3楼的先删除红色部分………… 之后再在原来的结果上 添加上 $password 变量$sSource=FileRead(@desktopDir&"\密码.rdp");假设存放路径在桌面
MsgBox(0, '原文内容', $sSource)
$password = '12345678'
$file=FileOpen(@desktopDir&"\密码.rdp",2);2 = 写入模式(先删除之前的内容)
Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1')
$sSRERe &=$password
FileWrite($file,$sSRERe)
MsgBox(0, '替换结果', $sSRERe)
;~ ConsoleWrite($sSRERe)
FileClose($file)
注意其中的写法: Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1')

floor6ggg 发表于 2020-1-27 23:16:28

本帖最后由 floor6ggg 于 2020-1-28 00:37 编辑

尝试用A大的正则表达式神器, 想一步到位,。。。。。用到其中的一个功能:变量及宏代入表达式前先转义字符。。这部分不熟悉不会用。。。。。。。替换的结果不够完美仅供参考一下…………中间有个空格,我也不知的怎么去除,…………可能是我目前使用的神器版本过低(1.5.1版本)的原因?………### 友情提示:本脚本由 Au3.REHelper 于 2020/01/27 22:51 自动生成,不保证其正确性,请自行测试 ###
Local $sSource = 'password 51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB010000000766BE1F58CCA44082BCC46C1A155B5A00000000020000000000106600000001000020000000DA6D8FE678773CE6C70D5B9A8DEBA5A721A0DF1423AC4623DB3E664BB290DFE5000000000E8000000002000020000000A35773E38EAC800BCA8AD6B6B86C683CA0DE054A11C51CF80875092B01C2CA7E2000000067BE91888738802AE683E91F3DCBCD4630B421CB31AC062405DF5171C387C4A0400000001F875ADDCF475F720C31A16C41E3E39F308DC329F48A32BA59C3127D163977E90EA37B30DCF73F7642626F59A8DC3673A051973B5AE697A3E0011413812EC12B' & @CRLF
;~MsgBox(0, '源字符串', $sSource)
$password = '12345678'
Local $sEscape = '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)'
Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1 ' & StringRegExpReplace($password, $sEscape, '\\$1'), 1)
MsgBox(0, '替换结果', $sSRERe)
ConsoleWrite($sSRERe)
password 51:b: 12345678,中间有个空格,没辙了…………   等高人出手吧,看有没有办法去除中间的空格…………

zghwelcome 发表于 2020-1-28 01:37:13

Local $sSource = 'password' & @CRLF & '51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB010000000766BE1F58CCA44082BCC46C1A155B5A00000000020000000000106600000001000020000000DA6D8FE678773CE6C70D5B9A8DEBA5A721A0DF1423AC4623DB3E664BB290DFE5000000000E8000000002000020000000A35773E38EAC800BCA8AD6B6B86C683CA0DE054A11C51CF80875092B01C2CA7E2000000067BE91888738802AE683E91F3DCBCD4630B421CB31AC062405DF5171C387C4A0400000001F875ADDCF475F720C31A16C41E3E39F308DC329F48A32BA59C3127D163977E90EA37B30DCF73F7642626F59A8DC3673A051973B5AE697A3E0011413812EC12B' & @CRLF$sRe = '12345678'
Local $sOut = StringRegExpReplace($sSource, '(?is)(^.*51:b:)(.*)', '${1}' & $sRe)
MsgBox(0, 0, $sOut)

floor6ggg 发表于 2020-1-28 11:41:46

zghwelcome 发表于 2020-1-28 01:37
Local $sSource = 'password' & @CRLF & '51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB01000000076 ...

厉害!学习了。。。。原来可以这样写。。。。

anythinging 发表于 2020-1-28 13:11:05

本帖最后由 anythinging 于 2020-1-28 13:12 编辑

感谢各位指点!我按5楼的方法汇总了,6楼的不会放入其中,还请指点。$sSource=FileRead(@desktopDir&"\default.rdp");假设存放路径在桌面;替换文件中的password 51:b:后的内容
MsgBox(262144, '原文内容', $sSource)

$file=FileOpen(@desktopDir&"\default.rdp",2);2 = 写入模式(先删除之前的内容)

Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1')
MsgBox(262144, '替换结果', $sSRERe)

$password = '12345678'
Local $sEscape = '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)'
Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1 ' & StringRegExpReplace($password, $sEscape, '\\$1'), 1)
MsgBox(262144, '更改结果', $sSRERe)

FileWrite($file,$sSRERe)
FileClose($file)
另外我还想了个笨法,能否把password 51:b:这一行直接全部删除,再重新添加一行,恳请指点代码。


anythinging 发表于 2020-1-28 15:24:56

zghwelcome 发表于 2020-1-28 13:26

$sSource=FileRead(@desktopDir&"\default.rdp");假设存放路径在桌面;替换文件中的password 51:b:后 ...

感谢回复,这个确实有效,不过原文件内的其它内容没有了

anythinging 发表于 2020-1-28 17:17:28

zghwelcome 发表于 2020-1-28 15:47
Local $sSRERe = StringRegExpReplace($sSource, '(?is)(^.*51:b:)(.*)', '${1}' & $password)

Local...

可以了,感谢指点!

anythinging 发表于 2020-1-29 15:03:24

感谢指点!还想请教下,假如要删除这一行代码应该怎样写?谢谢!

floor6ggg 发表于 2020-1-29 22:35:50

anythinging 发表于 2020-1-29 15:03
感谢指点!还想请教下,假如要删除这一行代码应该怎样写?谢谢!

代码里面的:
$file=FileOpen(@desktopDir&"\default.rdp", FileGetEncoding(@desktopDir&"\default.rdp") + 2);2 = 写入模式(先删除之前的内容)

在FileOpen的时候,文档的内容就已经删除为空值了,没有行可以删除了

anythinging 发表于 2020-1-30 11:47:02

floor6ggg 发表于 2020-1-29 22:35
代码里面的:
$file=FileOpen(@desktopDir&"\default.rdp", FileGetEncoding(@desktopDir&"\default.rdp ...

感谢指点!请问如果要保留文件里其它内容,只是删除这一行呢?
页: [1] 2
查看完整版本: 【已解决】关于替换或删除文件中的部份字符的问题