131738 发表于 2011-6-13 21:33:49

(已解决) 如何只替换指定的字符串?谢谢!!!

本帖最后由 131738 于 2011-6-16 17:06 编辑

问题已解决!想知道解决方法的,往下看回贴吧!
txt.txt 文本文件的数据###File###
Wy File
FileName
My File Name
MyFileName
File
......
......要求只替换第 6 行的 File 为“文件”,其它一律保持原样,为提高速度,用只替换一次的模式,不必区分大小写

我不知如何判断要替换的 File 前面有什么?,因为这是一个 txt 文件,所以这个 File 后面应该有一个回车吧,不会出现在文件结束行

要替换对象能判断的条件就是,始终是一个单词(或是2、 3 个单词的无空格连接书写),独占一行,且顶行起头。

乱打乱闯的瞎配正则表达式,结果一无所获,请求帮助解决!谢谢!!!

afan 发表于 2011-6-13 22:05:38

本帖最后由 afan 于 2011-6-13 22:17 编辑

是这意思不Local $Str = _
                '###ABCD###' & @CRLF & _
                'AbcD' & @CRLF & 'ABCD'
MsgBox(0, '源字符串', $str)
Local $szSearchString = 'Abcd'
Local $szReplaceString = '1234'
Local $Test = StringRegExpReplace($str, '(?i)(?<!###)\Q' & $szSearchString & '\E', $szReplaceString, 1)
MsgBox(0, '替换结果', $Test)

131738 发表于 2011-6-13 22:22:39

是这意思不
afan 发表于 2011-6-13 22:05 http://autoitx.com/images/common/back.gif

刚看到你上来,正准备短信请教的,谢谢!!!代码我看看。。。。

131738 发表于 2011-6-13 22:55:16

回复 2# afan

谢谢!!!代码效果很好!!!可惜我不会引申应用。。。

###ABCD###' 只是个特例,还用一些其它的情况,StringRegExpReplace($str, '(?i)(?<!###)\Q' & $szSearchString & '\E', $szReplaceString, 0)
这句代码对其它情况要替换的文本,我不知如何应用,有否完全匹配替换文本的通用正则语句呢?

netegg 发表于 2011-6-13 23:03:09

_ReplaceStringInFile("F:\txt.txt", "ABCD", "1234", 0, 1)

afan 发表于 2011-6-13 23:03:21

回复afan

谢谢!!!代码效果很好!!!可惜我不会引申应用。。。

###ABCD###' 只是个特例,还用一 ... 完全匹配替换文本的通用正则语句...
131738 发表于 2011-6-13 22:55 http://www.autoitx.com/images/common/back.gif


    呵呵,“完全匹配替换文本的通用正则语句”不知道是全部替换还是? 如果是全部替换,上面的最后一个参数由1改为0即可。

前辈在一楼所提出的问题,则不光是完全匹配的意思了,还有前面不能是“###”的前提,所以,具体问题具体对待,所谓的“完全匹配替换文本的通用正则语句”可能不能如此阐述,因为可能有许多的“要求”,我想这正是正则替换“StringRegExpReplace()”与普通替换“StringReplace()”的区别所在了。

3mile 发表于 2011-6-13 23:08:27

请问前辈,需要替换的ABCD是单独的一行吗?

131738 发表于 2011-6-13 23:11:07

回复 6# afan

谢谢!!!不懂的尽说了外行话,见笑了,我再看看你的_FileSRER2Line   UDF 函数

afan 发表于 2011-6-13 23:15:29

本帖最后由 afan 于 2011-6-13 23:18 编辑

_ReplaceStringInFile("F:\txt.txt", "ABCD", "1234", 0, 1)
netegg 发表于 2011-6-13 23:03 http://www.autoitx.com/images/common/back.gif
    蛋蛋没看清题,呵呵~


请问前辈,需要替换的ABCD是单独的一行吗?
3mile 发表于 2011-6-13 23:08 http://www.autoitx.com/images/common/back.gif
    我估计这个不太重要,呵呵~


回复afan

谢谢!!!不懂的尽说了外行话,见笑了,我再看看你的_FileSRER2Line   UDF 函数
131738 发表于 2011-6-13 23:11 http://www.autoitx.com/images/common/back.gif
    哪里,前辈谦虚了,要说外行,咱可是地地道道的~~ _FileSRER2Line() 可以满足许多要求,但没有一楼的要求,哈

131738 发表于 2011-6-13 23:29:34

本帖最后由 131738 于 2011-6-13 23:32 编辑

回复 9# afan #            文件路径,   '搜索字','替换', 整行需完全匹配, 正则标志, 回车符
_FileSRER2Line('Test.txt', '关键字', '替换字',      1,         1,      1 )还没测试,这句不适合 1 楼么?

afan 发表于 2011-6-13 23:31:53

回复 10# 131738


    如果是“整行需完全匹配”那就可以,不过,真是只有“ABCD”吗?

131738 发表于 2011-6-13 23:37:44

回复 11# afan

我只要求完全匹配 ABCD , 排除 ABCD 前后有任何字符的情况!

afan 发表于 2011-6-13 23:39:10

本帖最后由 afan 于 2011-6-13 23:40 编辑

回复 12# 131738


    那就没问题,_FileSRER2Line() 可以满足。同时证明 3mile 的提问是很有见地的……

131738 发表于 2011-6-13 23:40:03

回复131738


    如果是“整行需完全匹配”那就可以,不过,真是只有“ABCD”吗?
afan 发表于 2011-6-13 23:31 http://autoitx.com/images/common/back.gif

我的替换操作都是以整行为目标的

afan 发表于 2011-6-13 23:41:49

我的替换操作都是以整行为目标的
131738 发表于 2011-6-13 23:40 http://www.autoitx.com/images/common/back.gif


    那就用它吧,记得关闭“正则标志”
页: [1] 2 3 4
查看完整版本: (已解决) 如何只替换指定的字符串?谢谢!!!