找回密码
 加入
搜索
查看: 3587|回复: 8

[AU3基础] [已解决]正则:如何删除某特定行?如何匹配出文本中某特定段?

  [复制链接]
发表于 2011-6-22 11:02:04 | 显示全部楼层 |阅读模式
本帖最后由 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处?
发表于 2011-6-22 11:10:19 | 显示全部楼层
回复 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)
发表于 2011-6-22 11:10:20 | 显示全部楼层
1、 有空白是因为有换行符没有被替换掉你可以在\V+后面跟一个\r\n,或者是在处理完毕后把两个连续的换行替换成一个!
2、根据正则的懒惰与贪婪特点,如果没有?控制符,会最长匹配,解决方法是更详细的正则表达式或者在你上面的正则里面+后面加上一个?!  
以上内容仅仅给出意见,未进行代码测试,楼主自己摸索一下,印象更深刻
发表于 2011-6-22 11:14:07 | 显示全部楼层
如果愿意用垂直制表符匹配也可用这个:
[au3]#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)
发表于 2011-6-22 11:17:31 | 显示全部楼层
还是3M手快啊,我不建议用用\v+ 这样会删除本来存在的空行,你觉得呢

评分

参与人数 1金钱 +10 收起 理由
3mile + 10 有道理

查看全部评分

 楼主| 发表于 2011-6-23 09:47:59 | 显示全部楼层
本帖最后由 newuser 于 2011-6-23 09:49 编辑

回复
我马虎了,没有写上  + !
5# love5173

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-6-23 15:06:10 | 显示全部楼层
回复 3# love5173
谢谢!一些话惊醒糊涂人,我也一直按懒惰模式测试,但一直尝试用零宽模式解决,却忘记了零宽只是位置匹配并不匹配内容,结果第1个fat始终无法捕获,其实(?ms)^i...fat我都匹配完毕了,那么中间只要使用懒惰匹配就OK了,正如你的话一样,记忆确实深刻多了,谢谢.
 楼主| 发表于 2011-6-23 15:07:03 | 显示全部楼层
回复 5# love5173
删除文本自有 的空行:   \s\r
发表于 2013-5-29 23:32:33 | 显示全部楼层
留下脚印,先转转看
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-29 03:21 , Processed in 0.192954 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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