xdcysten 发表于 2013-3-17 21:01:50

[已解决]正则如何替换带有换行符 Chr(10) 或回车的字符

本帖最后由 xdcysten 于 2013-3-18 18:37 编辑

比如想替换掉'<1299>8W5D2D2          99x   645.65</1299> ' 这一行,用

StringRegExpReplace($sInput01,'<(?i)1299>(.*?)</(?i)1299>', '<1299>8W5D2D2         880x   775.65'& Chr(10)&'</1299>')
是可以的,但遇到像'<1298>8W5D2D2          99x   645.65'& Chr(10) &'</1298> ' ,带有 换行符 Chr(10) 或回车的就不成了


Local $sInput = '<name>AUTOIT </name> '& Chr(10)& _
      '<1298>8W5D2D2          99x   645.65'& Chr(10) &'</1298> '& _
      '<1299>8W5D2D2          99x   645.65</1299> '& _
      '<1300>8W5D2D2          99x   645.65</1300> '

Local $sInput02 = StringRegExpReplace($sInput01,'<(?i)1298>(.*?)</(?i)1298>', '<1298>8W5D2D2         880x   775.65'& Chr(10)&'</1298>')
MsgBox(4096, "Results", $sInput02)

afan 发表于 2013-3-17 22:40:15

不知道LZ到底要替换什么… 关键的东西不说明~$sInput02 = StringRegExpReplace($sInput,'(<1298>\w+\h+)\w+\h+\V+(?=[\S\s]*?</1298>)', '${1}880x   775.65')

xdcysten 发表于 2013-3-18 02:58:31

本帖最后由 xdcysten 于 2013-3-18 04:19 编辑

回复 2# afan


不好意思,语文水平太差 {:face (356):} ,还请见谅见谅,我的意思是想把
'<1298> ********      99x   645.65'&Chr(10)&'</1298> ' 这一串字符替换成 '<1623> gsdgsdg       160x    787112.22'&Chr(10)&'</1623> '

'<1298> </1298> '之间的字符不定型,也有可能是'<1298> 8W5D2D2      x99   75.65'&Chr(21)&'</1298> ' 这么一串字符


那个 Chr(10) 换行符,使用帮助里的例子 如: '<(?i)1298>(.*?)</(?i)1298>' 不能匹配到,
不知如何能匹配到字符和 控制符Chr(0) ~Chr(31) 一起的字符串呢

Local $sInput = '<name>autoit </name> '& Chr(10)& _.
         '<1297> ********      99x   645.65'& Chr(10) &'</1297> '& Chr(10) & Chr(10) & _
        '<1298> ********      99x   645.65'&Chr(13)&'</1298> '& Chr(10) & Chr(10) & _
        '<1299>8W5D2D2          x99   645.65'& Chr(12) &'</1299> '

MsgBox(4096, "Results", StringRegExpReplace($sInput, '<(?i)1298>(.*?)</(?i)1298>', '<1298>8W5D2D2         660x   775.65</1298>'))

afan 发表于 2013-3-18 10:30:34

回复 3# xdcysten


    你的表达式和你说的把xxx替换成xxx 完全不符,到底要替换什么不清楚…
根本不需要说明 chr(),“(?s)”就可以忽略了。
如果你想“'<1298> ********      99x   645.65'&Chr(10)&'</1298> ' 这一串字符替换成 '<1623> gsdgsdg       160x    787112.22'&Chr(10)&'</1623> '”整行替换的话根本不要想那么多。二楼的我还给你保留了“99x   645.65”前后的字符,包括原始的有无回车换行等。看来你并不需要~Local $sInput = '<name>autoit </name> '& Chr(10)& _
         '<1297> ********      99x   645.65' & Chr(10) & '</1297> ' & Chr(10) & Chr(10) & _
      '<1298> ********      99x   645.65' &Chr(13)& '</1298> ' & Chr(10) & Chr(10) & _
      '<1299>8W5D2D2          x99   645.65' & Chr(12) & '</1299> '

Local $sInput02 = StringRegExpReplace($sInput,'(?s)<1298>.+?</1298>', '<1623> gsdgsdg       160x    787112.22'&Chr(10)&'</1623> ')

MsgBox(4096, "Results", $sInput & @CRLF & '======= 前后 ========' & @CRLF & $sInput02)

xdcysten 发表于 2013-3-18 18:07:14

回复xdcysten


    你的表达式和你说的把xxx替换成xxx 完全不符,到底要替换什么不清楚…
根本不需 ...
afan 发表于 2013-3-18 10:30 http://www.autoitx.com/images/common/back.gif

那个表达式不符合说明,误导了大家,不好意思,吾正则实在是非常非常不合格也,呵呵,看来得要学习学习一下了,以为匹配不到是那控制符的问题,A版的正则很强大,学习了,谢谢
页: [1]
查看完整版本: [已解决]正则如何替换带有换行符 Chr(10) 或回车的字符