找回密码
 加入
搜索
查看: 4000|回复: 9

[效率算法] 求助,正则取字符串(以关键字开头的多行字符)[已解决]

  [复制链接]
发表于 2015-9-25 01:08:57 | 显示全部楼层 |阅读模式
本帖最后由 Huiseyu 于 2015-9-25 19:55 编辑

正则实在是越搞越不懂...主要是不知道如何处理多行,求助帮忙啦...
$str = _
'StrStart 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&'ad333333 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&'opeweowp 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&@CR _
&'StrStart 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&'ad333333 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&'opeweowp 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&@CR

MsgBox(8096 ,'源字符串' ,$str)
每个以StrStart开头的段落,已空行结束,就像这样的一段..先谢过了,要睡了....
StrStart 1 1 1 3  32 kk 99 dd lll 999 9s9s
ad333333 1 1 1 3  32 kk 99 dd lll 999 9s9s 
opeweowp 1 1 1 3  32 kk 99 dd lll 999 9s9s 
发表于 2015-9-25 09:05:56 | 显示全部楼层
符合条件的应该有两段吧
这里的分行符只有 @CR ,因此只有 \r
(?<=^|\r)StrStart.+?\r\r
 楼主| 发表于 2015-9-25 11:45:50 | 显示全部楼层
本帖最后由 Huiseyu 于 2015-9-25 11:47 编辑
符合条件的应该有两段吧
这里的分行符只有 @CR ,因此只有 \r
afan 发表于 2015-9-25 09:05
嗯,是的,这个是个以文本格式记录的数据库。有很多很多的字符串,不止两段的啦
要把StrStart开头的,以空行结束的每一段 字符串整理出来到另外的地方
刚才试了一下只取了已StrStrart所在的一行,'StrStart 1 1 1 3  32 kk 99 dd lll 999 9s9s  ,两个\r的话又什么都没有了
$str = _
'StrStart 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&'ad333333 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&'opeweowp 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&@CR _
&'StrStart 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&'ad333333 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&'opeweowp 1 1 1 3  32 kk 99 dd lll 999 9s9s ' &@CR _
&@CR

MsgBox(8096 ,'源字符串' ,$str)

$res = StringRegExp($str ,'(?<=^|\r)StrStart.+?\r' ,3)
#include'array.au3'
_ArrayDisplay($res) ;。
可不可以把以StrStrart开头,空行结尾的一整段字符取出来。[保持段落的原格式]
请再帮忙看看,我要把多个数据库合成一个。拿到别处用,就是要提取这些关键配置不然重做的话要做瘫....
 楼主| 发表于 2015-9-25 11:51:06 | 显示全部楼层

本帖子中包含更多资源

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

×
发表于 2015-9-25 15:22:57 | 显示全部楼层
回复 4# Huiseyu


    3.3.6.1 我上面的表达式是可以取到两段的…
发表于 2015-9-25 19:10:21 | 显示全部楼层
换了3.3.14.2版本,修改表达式,前面加个“(?s)”即可通用
$str = _
                'StrStart 1 1 1 3  32 kk 99 dd lll 999 9s9s ' & @CR _
                 & 'ad333333 1 1 1 3  32 kk 99 dd lll 999 9s9s ' & @CR _
                 & 'opeweowp 1 1 1 3  32 kk 99 dd lll 999 9s9s ' & @CR _
                 & @CR _
                 & 'StrStart 1 1 1 3  32 kk 99 dd lll 999 9s9s ' & @CR _
                 & 'ad333333 1 1 1 3  32 kk 99 dd lll 999 9s9s ' & @CR _
                 & 'opeweowp 1 1 1 3  32 kk 99 dd lll 999 9s9s ' & @CR _
                 & @CR

MsgBox(8096, '源字符串', $str)

$res = StringRegExp($str, '(?s)(?<=^|\r)StrStart.+?\r\r', 3)

#include'array.au3'
_ArrayDisplay($res)
 楼主| 发表于 2015-9-25 19:28:34 | 显示全部楼层
换了3.3.14.2版本,修改表达式,前面加个“(?s)”即可通用
afan 发表于 2015-9-25 19:10



    谢谢A大,刚吃完饭就看到回复了。
我还有一个问题
如何保持段落的换行格式 ,不把一段变成一长串的了
发表于 2015-9-25 19:47:22 | 显示全部楼层
谢谢A大,刚吃完饭就看到回复了。
我还有一个问题
如何保持段落的换行格式 ,不把 ...
Huiseyu 发表于 2015-9-25 19:28



    现在就是保存原始的换行格式啊,不是变成了一长串,而是本来就是一样的。你看到的一长串,用MsgBox看看就知道了
 楼主| 发表于 2015-9-25 19:55:01 | 显示全部楼层
本帖最后由 Huiseyu 于 2015-9-25 19:56 编辑
现在就是保存原始的换行格式啊,不是变成了一长串,而是本来就是一样的。你看到的一长串,用MsgB ...
afan 发表于 2015-9-25 19:47



    哇靠,太神奇了。。果然如此。我已经白的连msgbox都不会玩了。。。尴尬苦笑中
谢谢A大,帮了一个大忙....以后就方便啦..
发表于 2015-10-1 10:02:37 | 显示全部楼层
正则真的好强大,学习了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-10 04:39 , Processed in 0.078202 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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