[已解决]正则:如何删除某特定行?如何匹配出文本中某特定段?
本帖最后由 newuser 于 2011-6-23 15:07 编辑Local$str="this is a apple."&@CRLF& _ ;注意多行字符串的定义不要少了@crlf
"this is a red red apple."&@CRLF& _
"i love regex!"&@CRLF& _
"ilove regular expressions?"&@CRLF&_
"this is a fat"&@CRLF& _
"<very>fat</very> pig."
Local$result=StringRegExp($str,"(?ms)^i\V+",3)
_ArrayDisplay($result)
Local$result=StringRegExpReplace($str,"(?ms)^i\V+","")
;用指定空 内容替换 ((?ms)^i\V+)匹配的内容
;缺点:被替换处显示对应空行,如何实现删除指定行而不出现空白呢?希望想删除特定行那样不留空白.Local$str="this is a apple."&@CRLF& _ ;注意多行字符串的定义不要少了@crlf
"this is a red red apple."&@CRLF& _
"i love regex!"&@CRLF& _
"ilove regular expressions?"&@CRLF&_
"this is a fat"&@CRLF& _
"<very>fat</very> pig."
Local$result=StringRegExp($str,"(?ms)^i[\s\S]+fat",3)
_ArrayDisplay($result)如何从第一个字母i处取到第一个fat截止,而不是到第2个fat处? 回复 1# newuser
#include <array.au3>
Local$str="this is a apple."&@CRLF& _ ;注意多行字符串的定义不要少了@crlf
"this is a red red apple."&@CRLF& _
"i love regex!"&@CRLF& _
"ilove regular expressions?"&@CRLF&_
"this is a fat"&@CRLF& _
"<very>fat</very> pig."
Local$result=StringRegExp($str,"(?ms)^i.*?\r\n",3)
_ArrayDisplay($result)
Local$result=StringRegExpReplace($str,"(?ms)^i.*?\r\n","")
msgbox(0,0,$result)
;~ ;用指定空 内容替换 ((?ms)^i\V+)匹配的内容
;~ ;缺点:被替换处显示对应空行,如何实现删除指定行而不出现空白呢?
Local$str="this is a apple."&@CRLF& _ ;注意多行字符串的定义不要少了@crlf
"this is a red red apple."&@CRLF& _
"i love regex!"&@CRLF& _
"ilove regular expressions?"&@CRLF&_
"this is a fat"&@CRLF& _
"<very>fat</very> pig."
Local$result=StringRegExp($str,"(?ms)^i.*?(?=fat)",3)
_ArrayDisplay($result) 1、 有空白是因为有换行符没有被替换掉你可以在\V+后面跟一个\r\n,或者是在处理完毕后把两个连续的换行替换成一个!
2、根据正则的懒惰与贪婪特点,如果没有?控制符,会最长匹配,解决方法是更详细的正则表达式或者在你上面的正则里面+后面加上一个?!
以上内容仅仅给出意见,未进行代码测试,楼主自己摸索一下,印象更深刻 如果愿意用垂直制表符匹配也可用这个:
#include <array.au3>
Local$str="this is a apple."&@CRLF& _ ;注意多行字符串的定义不要少了@crlf
"this is a red red apple."&@CRLF& _
"i love regex!"&@CRLF& _
"ilove regular expressions?"&@CRLF&_
"this is a fat"&@CRLF& _
"<very>fat</very> pig."
Local$result=StringRegExp($str,"(?ms)^i\V+\v+",3)
_ArrayDisplay($result)
Local$result=StringRegExpReplace($str,"(?ms)^i\V+\v+","")
msgbox(0,0,$result) 还是3M手快啊,我不建议用用\v+ 这样会删除本来存在的空行,你觉得呢 本帖最后由 newuser 于 2011-6-23 09:49 编辑
回复
我马虎了,没有写上+ !
5# love5173 回复 3# love5173
谢谢!一些话惊醒糊涂人,我也一直按懒惰模式测试,但一直尝试用零宽模式解决,却忘记了零宽只是位置匹配并不匹配内容,结果第1个fat始终无法捕获,其实(?ms)^i...fat我都匹配完毕了,那么中间只要使用懒惰匹配就OK了,正如你的话一样,记忆确实深刻多了,谢谢. 回复 5# love5173
删除文本自有 的空行: \s\r 留下脚印,先转转看
页:
[1]