light_he 发表于 2015-12-2 15:55:18

[已解决]请问怎么提取字符串的的日期与时间,谢谢

本帖最后由 light_he 于 2015-12-3 15:00 编辑

大家好,请问怎么从下列的字符串提取日期与时间
第三行怎么提取中间的大小数值与后面的耗时
谢谢
已開始工作: 2015年12月1日 (在 下午 10:55:11)
已於 2015/12/1 日 上午 11:44:13 時完成備份。
已處理 7,095,324,441 個位元組,用了15 分鐘又14 秒。

afan 发表于 2015-12-2 16:19:20

#include <Array.au3>
Local $sSource = _
                '已開始工作: 2015年12月1日 (在 下午 10:55:11)' & @CRLF & _
                '已於 2015/12/1 日 上午 11:44:13 時完成備份。' & @CRLF & _
                '已處理 7,095,324,441 個位元組,用了15 分鐘又14 秒。'
;~MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, '(?s)(\d+年\d+月\d+日)\V+?(\d+:\d+:\d+).+?\v+.+?(\d+/\d+/\d+).+?(\d+:\d+:\d+).+?(\d+[\d,]+\d).+?了(.+?)。', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中元素为: ' & $aSRE)
_ArrayDisplay($aSRE, UBound($aSRE))

haijie1223 发表于 2015-12-2 16:30:43

总之我要用匹配两次以上,坐等大神出手

light_he 发表于 2015-12-2 17:28:21

回复 2# afan

谢谢a版
有一个问题是: 时间位置是上午/下午可不可以在时间位置带出来,谢谢。

afan 发表于 2015-12-2 17:58:43

#include <Array.au3>
Local $sSource = _
                '已開始工作: 2015年12月1日 (在 下午 10:55:11)' & @CRLF & _
                '已於 2015/12/1 日 上午 11:44:13 時完成備份。' & @CRLF & _
                '已處理 7,095,324,441 個位元組,用了15 分鐘又14 秒。'
Local $aSRE = StringRegExp($sSource, '(?s)(\d+年\d+月\d+日)\V+?在\h+(.+?\d+:\d+:\d+).+?\v+.+?(\d+/\d+/\d+).+?日\h+(.+?\d+:\d+:\d+).+?(\d+[\d,]+\d).+?了(.+?)。', 3)
_ArrayDisplay($aSRE, UBound($aSRE))

light_he 发表于 2015-12-3 08:10:20

回复 5# afan


    测试成功,太感谢了

light_he 发表于 2015-12-3 09:58:24

回复 5# afan

不好意思,还要再麻烦一下,测试发现如下问题,如果第三个字串 已處理 0 個位元組,就抓不到数据了,至少得改成3位数才可以抓到
请再帮忙看看, 另外这个正则能不能改成3句正则,也就是每一行一个正则,我按照如下正则修改半天都不成功,搞崩溃了,谢谢啦.
#include <Array.au3>
Local $sSource = _
                '已開始工作: 2015年12月1日 (在 下午 10:55:11)' & @CRLF & _
                '已於 2015/12/1 日 上午 11:44:13 時完成備份。' & @CRLF & _
                '已處理 0 個位元組,用了15 分鐘又14 秒。'
Local $aSRE = StringRegExp($sSource, '(?s)(\d+年\d+月\d+日)\V+?在\h+(.+?\d+:\d+:\d+).+?\v+.+?(\d+/\d+/\d+).+?日\h+(.+?\d+:\d+:\d+).+?(\d+[\d,]+\d).+?了(.+?)。', 3)
_ArrayDisplay($aSRE, UBound($aSRE))

已開始工作: 2015年12月1日 (在 下午 10:55:11)
已於 2015/12/1 日 上午 11:44:13 時完成備份。
已處理 7,095,324,441 個位元組,用了15 分鐘又14 秒。

35888894 发表于 2015-12-3 11:09:15

已處理\s\d[\d\.]*?\d\s個位元組,用了\d+\s分鐘(?:又\d+\s秒。)*

afan 发表于 2015-12-3 11:12:11

回复 7# light_he


    可以分3个表达式(\d+年\d+月\d+日)\V+?(\d+:\d+:\d+)(\d+/\d+/\d+).+?(\d+:\d+:\d+)(\d+(?:[\d,]+\d)?).+?了(.+?)。

light_he 发表于 2015-12-3 14:56:40

回复 9# afan


    谢谢a版,测试都可以。

light_he 发表于 2015-12-3 15:02:17

好像不能移动到已解决版块,版主帮忙下,谢谢。
页: [1]
查看完整版本: [已解决]请问怎么提取字符串的的日期与时间,谢谢