cihron 发表于 2016-4-8 22:48:40

正则表达式的多行取值,高手进

本帖最后由 cihron 于 2016-4-14 13:23 编辑



想以“202”为关键字,取最近的日期和后边的值,结果总取到第一个日期,有什么招吗?

原码如下:
date:2013/12/31
001   ABCD   100
002   AAAA   200
003   ABAB   300
date:2015/05/28
101   EEEE   500
102   QQQQ   600
date:2016/03/18
201   LLLL   800
202   XXXX   900

=========================================================

9楼 “zldfsz” 大和尚的方法确实解决了这个问题,贴出来代大家学习:

(?s).*(\d{4}/\d{2}/\d{2}).*?202\s+\w+\s+(\d+)   正确
(?s)(\d{4}/\d{2}/\d{2}).*?202\s+\w+\s+(\d+)      错误

=========================================================

这几天我都快放弃了,以为正则无解了,原来却只是差这一点 “.*"

看来还是人外有人,山外有山哈,小菜们勤加学习吧!!!

ScriptFans 发表于 2016-4-9 00:28:50

加个 (?U) 试试看,表示非贪婪模式,默认为贪婪模式。

haijie1223 发表于 2016-4-9 09:08:26

cihron 发表于 2016-4-9 09:59:40

回复 3# haijie1223


    这种方法在这个例子中确实没问题,但真实数据中日期间的数据行数和数据的位置是不一定的,只能根据关键词来取值。

cihron 发表于 2016-4-9 10:06:06

偿试了下用环视解决:
   
      (?<=(\d{4}\d{2}\d{2})).*?202\s+\w+\s+(\d+)

结果也是一样的,.*?组合太贪婪了,虽然加了限定符“?”但貌似只能限制期后面的匹配,对前面的没有约束。

haijie1223 发表于 2016-4-9 10:07:05

回复 4# cihron


    那就把实际问题的数据全部发上来啊

cihron 发表于 2016-4-9 12:00:39

回复 6# haijie1223


    原文太大,没招。

afan 发表于 2016-4-9 13:36:37

回复haijie1223


    原文太大,没招。
cihron 发表于 2016-4-9 12:00 http://www.autoitx.com/images/common/back.gif


    奇怪,楼上的超版在求你呢…

zldfsz 发表于 2016-4-9 17:04:19

本帖最后由 zldfsz 于 2016-4-9 17:05 编辑

;### 友情提示:本脚本由 Au3.REHelper 于 2016/04/09 17:00 自动生成,不保证其正确性,请自行测试 ###
#include <Array.au3>
Local $Str = _
'date:2015/12/31' & @CRLF & _
'001   ABCD    100' & @CRLF & _
'002   AAAA    200' & @CRLF & _
'003   ABAB    300' & @CRLF & _
'date:2016/03/18' & @CRLF & _
'201    LLLL    800' & @CRLF & _
'202    XXXX    900'
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExp($str, '(?s).*(\d{4}/\d{2}/\d{2}).*?202\s+\w+\s+(\d+)', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($Test), '其中元素为: ' & $Test)
_ArrayDisplay($Test, UBound($Test))


haijie1223 发表于 2016-4-9 18:12:03

回复 8# afan


    afan,~又在卖弄风骚~{:face (303):}

afan 发表于 2016-4-9 19:41:32

回复afan


    afan,~又在卖弄风骚~
haijie1223 发表于 2016-4-9 18:12 http://www.autoitx.com/images/common/back.gif


    与字符串相关的提问,居然没有提供源字符串,要帮忙的人照着贴图码字?
当然,有卖弄风骚的人愿意 {:face (303):}

haijie1223 发表于 2016-4-9 19:51:18

回复 11# afan


    afan一定在说9楼,法海属于纯闷骚型的美男子~{:face (411):}

afan 发表于 2016-4-9 20:17:14

回复afan


    afan一定在说9楼,法海属于纯闷骚型的美男子~
haijie1223 发表于 2016-4-9 19:51 http://www.autoitx.com/images/common/back.gif


    你也是…话说大家都在用旧版的Au3.REHelper {:face (394):}

haijie1223 发表于 2016-4-9 21:21:38

回复 13# afan


    能用就好&#128516;

heroxianf 发表于 2016-4-9 21:39:33

正则还是把源文件发出来比较好大大们会考虑的很周到{:face (197):}
页: [1] 2
查看完整版本: 正则表达式的多行取值,高手进