正则获取对话内容[已解决]
本帖最后由 heroxianf 于 2016-3-23 10:28 编辑感谢各位的帮助,问题解决了,把代码分享出来,希望对新朋友有帮助。附件中有范文!
Local $hFile, $text, $aStr, $sStr, $aTime, $cTime, $dTime, $aName, $bName
Local $oExcel, $oWorkbook, $i, $j
local $bTime = @YDAY & stringregexpreplace(_NowTime(), ":", "") &_Timer_Init()
$hFile = FileOpen("test.txt")
$text = FileRead($hFile)
FileClose($hFile)
$oExcel = _Excel_Open(False)
$oWorkbook = _Excel_BookNew($oExcel)
$aStr = StringRegExp($text, "(?m)[\S].+", 3)
If IsArray($aStr) Then
$j = 0
For $i = 0 To UBound($aStr) - 1
If StringRegExp($aStr[$i], "[\d{2,4}-]+\s[\d:]+") Then
$aTime = stringRegExp($aStr[$i], "\d{2}:\d{2}:\d{2}", 1)
$aName = stringRegExp($aStr[$i], ".+(?=\d{4}-\d{2}-\d{2})", 1)
$bName = StringRegExpReplace($aName, "\h+", "")
$j = $j + 1
_Excel_RangeWrite($oWorkbook, Default, $bName, "A" & $j)
_Excel_RangeWrite($oWorkbook, Default, $aTime, "B" & $j)
Else
_Excel_RangeWrite($oWorkbook, Default, $aStr[$i], "C" & $j)
EndIf
Next
EndIf
_Excel_BookSaveAs($oWorkbook, @ScriptDir & "\" & $bTime & ".xlsx", Default, True)
_Excel_BookClose($oWorkbook)
tb-bj-shepei 2016-03-18 11:40:54
您好,请问有什么可以帮到您呢?#E-s07
向日葵1073 2016-03-18 11:40:56
在吗
tb-bj-shepei 2016-03-18 11:41:02
在的呢 您是遇到什么问题了呢?#E-s57#E-s57
向日葵1073 2016-03-18 11:42:34
我买了个飞机杯到现在都没到是什么原因呢.?
这是测试用例,我想获取对话内容请问正则该如何写呢?(内容可能是任何字符)
测试用例: 我认为可以逐行获取,判断是不是含有用户名和时间,如果有,那过滤掉,那么剩下的就是聊天内容。 我现在能想到的方法就是先去掉空行然后filereadtoarray到数组,然后再写入execl里面,速度有点慢的吓人! 本帖最后由 heroxianf 于 2016-3-22 10:50 编辑
回复 2# haijie1223 local $xArray = FileReadToArray(@scriptdir & '/test.txt')
For $i = 0 To ubound($xArray) - 1
;~ msgbox(0, '', $xArray[$i], 1)
If $xArray[$i] = '' Then
Sleep(100)
Else
FileWriteLine(@scriptdir & '/a.txt', $xArray[$i])
EndIf
Next
ShellExecute(@scriptdir & '/a.txt')hai大 用户名是变化的,有很多。 本帖最后由 即即 于 2016-3-22 11:43 编辑
回复 1# heroxianf
初学正则,是否可以这样:Local $Replace = StringRegExpReplace($Value, '.+\d{4}-\d{2}-\d{2}.+|#E-.+', '', 0)
再把空行去掉:Local $Replace = StringRegExpReplace($Value, '.+\d{4}-\d{2}-\d{2}.+|#E-.+|\r\n\h*(?=\V|$)', '', 0) 回复 4# heroxianf
你是不是只是想去掉空白行? 回复 6# haijie1223
不是哈,我判断那里不知道如何写,因为时间也是有变化的!我用正则\d{}4-\d{2}-\d{2} 判断没有效果。如果从读出每行内容来判断就直接到EXCEL里就减少了一个环节,很好的。 回复 5# 即即
我最终是要写入excel里面,我先试试你的代码。 回复 8# heroxianf
你想要获取哪一部分内容,能描述清楚吗? 回复 9# haijie1223
按照你给的思路我可以完成所有做的事情,判断一句中有时间或用户名就记录到1.txt,如果没有时间或用户名就记录到b.txt 回复 9# haijie1223 #include <excel.au3>
Local $oExcel = _Excel_Open(False)
Local $oWorkbook = _Excel_BookNew($oExcel)
Local $xArray = FileReadToArray(@ScriptDir & '/test.txt')
For $i = 0 To UBound($xArray) - 1
;~ msgbox(0, '', $xArray[$i], 1)
If $xArray[$i] == '' Then
Sleep(20)
Else
FileWriteLine(@ScriptDir & '/a.txt', $xArray[$i])
EndIf
Next
Local $iArray = FileReadToArray(@ScriptDir & '/a.txt')
For $ii = 0 To UBound($iArray) - 1
;~ msgbox(0, "", $i, 1)
If StringIsInt($ii / 2) = 0 Then
_Excel_RangeWrite($oWorkbook, Default, $iArray[$ii], "B" & $ii)
ElseIf StringIsInt($ii / 2) = 1 Then
_Excel_RangeWrite($oWorkbook, Default, $iArray[$ii], "A" & $ii - 1 )
EndIf
Next
_Excel_BookSaveAs($oWorkbook, @ScriptDir & "\_Excel.xlsx", Default, True)
_Excel_BookClose($oWorkbook)
ShellExecute(@ScriptDir & "\_Excel.xlsx")我写成这样了,但是对于记录到excel里 还是有错行。请帮忙纠正一下! 回复即即
我最终是要写入excel里面,我先试试你的代码。
heroxianf 发表于 2016-3-22 12:44 http://www.autoitx.com/images/common/back.gif
不知道楼主要的是什么。#include <Array.au3>
Local $ReadFile = FileRead(@scriptdir & '\test.txt')
Local $Replace = StringRegExpReplace($ReadFile, '.+\d{4}-\d{2}-\d{2}.+|#E-.+|\r\n\h*(?=\V|$)', '', 0)
Local $RegExp = StringRegExp($Replace, '.+', 3)
_ArrayDisplay($RegExp, "拟写入excel的数据") 回复 12# 即即
谢谢,可以全部把内容抓取出来。我继续折腾一下。 回复 11# heroxianf
是这样吗?#include <excel.au3>
Local $hFile, $text, $aStr, $sStr
Local $oExcel, $oWorkbook, $i, $j
$hFile = FileOpen("test.txt")
$text = FileRead($hFile)
FileClose($hFile)
$oExcel = _Excel_Open(False)
$oWorkbook = _Excel_BookNew($oExcel)
$aStr = StringRegExp($text, "(?m)[\S].+", 3)
If IsArray($aStr) Then
$j = 0
For $i = 0 To UBound($aStr) - 1
If StringRegExp($aStr[$i], "[\d{2,4}-]+\s[\d:]+") Then
$j = $j + 1
_Excel_RangeWrite($oWorkbook, Default, $aStr[$i], "A" & $j)
Else
_Excel_RangeWrite($oWorkbook, Default, $aStr[$i], "B" & $j)
EndIf
Next
EndIf
_Excel_BookSaveAs($oWorkbook, @ScriptDir & "\_Excel.xlsx", Default, True)
_Excel_BookClose($oWorkbook)
回复 14# haijie1223
hai大你看看我折腾出来的,感觉获取用户名去掉空格那里还有点问题,请指点一下。{:face (239):}
页:
[1]
2