已解决 谢谢各位 字符串提前处理
本帖最后由 steven_deng 于 2012-8-2 09:26 编辑有个环境变量path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows7Master;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\SinoVoice\jTTS 5.0 Desktop\Bin;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\bin;C:\usr\local\bin;%CDSROOT%\tools\bin;%CDSROOT%\tools\libutil\bin;%CDSROOT%\tools\fet\bin;%CDSROOT%\tools\pcb\bin;%CDSROOT%\tools\specctra\bin;%CDSROOT%\tools\PSpice;%CDSROOT%\tools\PSpice\Library;%CDSROOT%\tools\Capture;%CDSROOT%\OpenAccess\bin\win32\opt
如何将带有%cdsroot%的变量放到最前面 即最终结果是:
path=%CDSROOT%\tools\bin;%CDSROOT%\tools\libutil\bin;%CDSROOT%\tools\fet\bin;%CDSROOT%\tools\pcb\bin;%CDSROOT%\tools\specctra\bin;%CDSROOT%\tools\PSpice;%CDSROOT%\tools\PSpice\Library;%CDSROOT%\tools\Capture;%CDSROOT%\OpenAccess\bin\win32\opt;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows7Master;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\SinoVoice\jTTS 5.0 Desktop\Bin;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\bin;C:\usr\local\bin
是否用字符正式规则来解决? 还是用循环解决,还没有找到好方法。
十分感谢 这种规则的字符串用StringMid 来取就行了Local $Str = 'path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows7Master;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\SinoVoice\jTTS 5.0 Desktop\Bin;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\bin;C:\usr\local\bin;%CDSROOT%\tools\bin;%CDSROOT%\tools\libutil\bin;%CDSROOT%\tools\fet\bin;%CDSROOT%\tools\pcb\bin;%CDSROOT%\tools\specctra\bin;%CDSROOT%\tools\PSpice;%CDSROOT%\tools\PSpice\Library;%CDSROOT%\tools\Capture;%CDSROOT%\OpenAccess\bin\win32\opt'
Local $p = StringInStr($Str, '%cdsroot%')
MsgBox(0, '', 'path=' & StringMid($Str, $p) & ';' & StringMid($Str, 6, $p -1 - 6)) 回复 2# afan
高人啊,我还在想用stringsplit来分隔后处理呢,原来可以这么简单。 对字符串的操作有了更多的认识。谢谢 回复 2# afan
afan的确很高明,小弟有一疑问,不知道afan有没有考虑过:
在本提问中,以%cdsroot%开头的语句都集中在一起(此例是都在文本的最后面),用你方法固然可行,倘若有那么一两个不符合的夹杂在前面据说的这些中间,那你的方法就会得到错误的答案。如:Local $Str = 'path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\SinoVoice\jTTS 5.0 Desktop\Bin;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\bin;%CDSROOT%\tools\bin;C:\usr\local\bin;%CDSROOT%\tools\libutil\bin;%CDSROOT%\tools\fet\bin;%CDSROOT%\tools\pcb\bin;%CDSROOT%\tools\specctra\bin;%CDSROOT%\tools\PSpice;%CDSROOT%\tools\PSpice\Library;%CDSROOT%\tools\Capture;C:\Program Files\Windows7Master;%CDSROOT%\OpenAccess\bin\win32\opt'
这是我手动变更的,按道理来说,环境变量的排列次序是按添加的先后顺序来排序的,所以完全有可能是打乱次序的,所以这个可能还是不能简单的用StringInStr和StringMid来解决吧~ 回复afan
afan的确很高明,小弟有一疑问,不知道afan有没有考虑过:
在本提问中,以%cdsroot% ...
xlj310 发表于 2012-8-2 00:36 http://www.autoitx.com/images/common/back.gif
所以我说“这种规则的字符串用StringMid 来取就行了”
如果不是这种规则当然另当别论,如上面的打乱下。Local $Str = 'path=C:\Windows\system32;%CDSROOT%\tools\pcb\bin;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\bin;%CDSROOT%\tools\bin;C:\usr\local\bin;%CDSROOT%\tools\libutil\bin;%CDSROOT%\tools\fet\bin;%CDSROOT%\tools\specctra\bin;%CDSROOT%\tools\PSpice;%CDSROOT%\tools\PSpice\Library;%CDSROOT%\tools\Capture;C:\Program Files\Windows7Master;%CDSROOT%\OpenAccess\bin\win32\opt;C:\Program Files\SinoVoice\jTTS 5.0 Desktop\Bin'
Local $sRER1 = StringRegExpReplace(StringRegExpReplace($str, '(?i)(?<=\=|;)(?:(?!%CDSROOT%)[^;])+;?', ''), ';?\s*$', '') & ';'
Local $sRER2 = StringRegExpReplace(StringRegExpReplace($str, '^.+?\=|(?i)%CDSROOT%[^;]+;?', ''), ';?\s*$', '')
MsgBox(0, '', '原字符串' & @CRLF & $Str & @CRLF & @CRLF & '替换结果' & @CRLF & $sRER1 & '■分界明示■' & $sRER2) 感谢各位 问题解决 要是能解释下正式表达式就更好了 呵呵 感谢楼主,非常好的东西
页:
[1]