正则表达式的多行取值,高手进
本帖最后由 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+) 错误
=========================================================
这几天我都快放弃了,以为正则无解了,原来却只是差这一点 “.*"
看来还是人外有人,山外有山哈,小菜们勤加学习吧!!! 加个 (?U) 试试看,表示非贪婪模式,默认为贪婪模式。 回复 3# haijie1223
这种方法在这个例子中确实没问题,但真实数据中日期间的数据行数和数据的位置是不一定的,只能根据关键词来取值。 偿试了下用环视解决:
(?<=(\d{4}\d{2}\d{2})).*?202\s+\w+\s+(\d+)
结果也是一样的,.*?组合太贪婪了,虽然加了限定符“?”但貌似只能限制期后面的匹配,对前面的没有约束。 回复 4# cihron
那就把实际问题的数据全部发上来啊 回复 6# haijie1223
原文太大,没招。 回复haijie1223
原文太大,没招。
cihron 发表于 2016-4-9 12:00 http://www.autoitx.com/images/common/back.gif
奇怪,楼上的超版在求你呢… 本帖最后由 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))
回复 8# afan
afan,~又在卖弄风骚~{:face (303):} 回复afan
afan,~又在卖弄风骚~
haijie1223 发表于 2016-4-9 18:12 http://www.autoitx.com/images/common/back.gif
与字符串相关的提问,居然没有提供源字符串,要帮忙的人照着贴图码字?
当然,有卖弄风骚的人愿意 {:face (303):} 回复 11# afan
afan一定在说9楼,法海属于纯闷骚型的美男子~{:face (411):} 回复afan
afan一定在说9楼,法海属于纯闷骚型的美男子~
haijie1223 发表于 2016-4-9 19:51 http://www.autoitx.com/images/common/back.gif
你也是…话说大家都在用旧版的Au3.REHelper {:face (394):} 回复 13# afan
能用就好😄 正则还是把源文件发出来比较好大大们会考虑的很周到{:face (197):}
页:
[1]
2