Huiseyu 发表于 2015-9-25 01:08:57

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

本帖最后由 Huiseyu 于 2015-9-25 19:55 编辑

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

MsgBox(8096 ,'源字符串' ,$str)取每个以StrStart开头的段落,已空行结束,就像这样的一段..先谢过了,要睡了....{:face (456):}StrStart 1 1 1 332 kk 99 dd lll 999 9s9s
ad333333 1 1 1 332 kk 99 dd lll 999 9s9s
opeweowp 1 1 1 332 kk 99 dd lll 999 9s9s

afan 发表于 2015-9-25 09:05:56

符合条件的应该有两段吧
这里的分行符只有 @CR ,因此只有 \r(?<=^|\r)StrStart.+?\r\r

Huiseyu 发表于 2015-9-25 11:45:50

本帖最后由 Huiseyu 于 2015-9-25 11:47 编辑

符合条件的应该有两段吧
这里的分行符只有 @CR ,因此只有 \r
afan 发表于 2015-9-25 09:05 http://www.autoitx.com/images/common/back.gif嗯,是的,这个是个以文本格式记录的数据库。有很多很多的字符串,不止两段的啦
要把StrStart开头的,以空行结束的每一段 字符串整理出来到另外的地方刚才试了一下只取了已StrStrart所在的一行,'StrStart 1 1 1 332 kk 99 dd lll 999 9s9s,两个\r的话又什么都没有了$str = _
'StrStart 1 1 1 332 kk 99 dd lll 999 9s9s ' &@CR _
&'ad333333 1 1 1 332 kk 99 dd lll 999 9s9s ' &@CR _
&'opeweowp 1 1 1 332 kk 99 dd lll 999 9s9s ' &@CR _
&@CR _
&'StrStart 1 1 1 332 kk 99 dd lll 999 9s9s ' &@CR _
&'ad333333 1 1 1 332 kk 99 dd lll 999 9s9s ' &@CR _
&'opeweowp 1 1 1 332 kk 99 dd lll 999 9s9s ' &@CR _
&@CR

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

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

Huiseyu 发表于 2015-9-25 11:51:06

afan 发表于 2015-9-25 15:22:57

回复 4# Huiseyu


    3.3.6.1 我上面的表达式是可以取到两段的…

afan 发表于 2015-9-25 19:10:21

换了3.3.14.2版本,修改表达式,前面加个“(?s)”即可通用$str = _
                'StrStart 1 1 1 332 kk 99 dd lll 999 9s9s ' & @CR _
               & 'ad333333 1 1 1 332 kk 99 dd lll 999 9s9s ' & @CR _
               & 'opeweowp 1 1 1 332 kk 99 dd lll 999 9s9s ' & @CR _
               & @CR _
               & 'StrStart 1 1 1 332 kk 99 dd lll 999 9s9s ' & @CR _
               & 'ad333333 1 1 1 332 kk 99 dd lll 999 9s9s ' & @CR _
               & 'opeweowp 1 1 1 332 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)

Huiseyu 发表于 2015-9-25 19:28:34

换了3.3.14.2版本,修改表达式,前面加个“(?s)”即可通用
afan 发表于 2015-9-25 19:10 http://www.autoitx.com/images/common/back.gif


    谢谢A大,刚吃完饭就看到回复了。
我还有一个问题{:face (52):}
如何保持段落的换行格式 ,不把一段变成一长串的了

afan 发表于 2015-9-25 19:47:22

谢谢A大,刚吃完饭就看到回复了。
我还有一个问题
如何保持段落的换行格式 ,不把 ...
Huiseyu 发表于 2015-9-25 19:28 http://www.autoitx.com/images/common/back.gif


    现在就是保存原始的换行格式啊,不是变成了一长串,而是本来就是一样的。你看到的一长串,用MsgBox看看就知道了

Huiseyu 发表于 2015-9-25 19:55:01

本帖最后由 Huiseyu 于 2015-9-25 19:56 编辑

现在就是保存原始的换行格式啊,不是变成了一长串,而是本来就是一样的。你看到的一长串,用MsgB ...
afan 发表于 2015-9-25 19:47 http://www.autoitx.com/images/common/back.gif


    哇靠,太神奇了。。果然如此。我已经白的连msgbox都不会玩了。。。尴尬苦笑中
谢谢A大,帮了一个大忙....以后就方便啦..{:face (427):}

nqawen 发表于 2015-10-1 10:02:37

正则真的好强大,学习了
页: [1]
查看完整版本: 求助,正则取字符串(以关键字开头的多行字符)[已解决]