找回密码
 加入
搜索
查看: 3974|回复: 5

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

  [复制链接]
发表于 2013-3-17 21:01:50 | 显示全部楼层 |阅读模式
本帖最后由 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) 
发表于 2013-3-17 22:40:15 | 显示全部楼层
不知道LZ到底要替换什么… 关键的东西不说明~
$sInput02 = StringRegExpReplace($sInput,  '(<1298>\w+\h+)\w+\h+\V+(?=[\S\s]*?</1298>)', '${1}880x     775.65')
 楼主| 发表于 2013-3-18 02:58:31 | 显示全部楼层
本帖最后由 xdcysten 于 2013-3-18 04:19 编辑

回复 2# afan


不好意思,语文水平太差 ,还请见谅见谅,我的意思是想把
'<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>')) 
发表于 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)
 楼主| 发表于 2013-3-18 18:07:14 | 显示全部楼层
回复  xdcysten


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


那个表达式不符合说明,误导了大家,不好意思,吾正则实在是非常非常不合格也,呵呵,看来得要学习学习一下了,以为匹配不到是那控制符的问题,A版的正则很强大,学习了,谢谢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-29 09:23 , Processed in 0.086982 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表