实现了一个用于正则表达式处理的工具,通过热键 F6
快速获取选定的文本内容,然后在工具界面中进行正则匹配与替换操作,处理后的内容可以复制到剪贴板。
/* 正则文本处理工具v1.0 热键F6 by 城西修改 2021.8.19 功能: 1.发送ctrl+c复制 2.将结果数据传入工具 3.可以在工具中正则处理 4.最后将处理后的文本内容放入剪切板 */ Clipboard= Send,{Ctrl down}c{Ctrl up} Sleep,200 Waitstr:=Clipboard IfWinExist,正则文本处理工具v1.0 { GuiControl , ,_FileContent, %Waitstr% return } g_SelectedFile = ;这个值是什么不清楚 Gui, Add, Button, x6 y20 w100 h30 g【打开】, 打开文件(&F) Gui, Add, Edit, x146 y22 w410 h25 r3 v_search g【正则表达式输入框】, ;-Multi Gui, Add, Button, x556 y20 w80 h50 g【匹配】, 匹配 Gui, Add, Edit, x686 y22 w300 h25 r3 v_replace g【替换字符输入框】, ;-Multi Gui, Add, Button, x986 y20 w80 h50 g【替换】, 替换 Gui, Add, Button, x750 y75 w100 h25 g【复制】, 复制结果内容 Gui, Add, Edit, x6 y108 w580 h550 HScroll v_FileContent,%Waitstr% Gui, Add, Edit, x596 y108 w510 h550 HScroll v_NewContent, 无匹配内容 Gui, Add, Text, x6 y80 w80 h20 , 原始文本 Gui, Add, Text, x596 y80 w80 h20 , 替换后文本 Gui, Add, Checkbox, x986 y75 w150 h20 v_OnlyRepalceMatch, 只替换有匹配的行 Gui, Add, Checkbox, x100 y75 w80 h20 v_MatchByLine, 逐行匹配 Gui, Add, Checkbox, x200 y75 w120 h20 v_MatchAll, 匹配全部>连接符 Gui, Add, Edit, x320 y72 w80 h25 r2 cred v_linkstr,> ;-Multi Gui, Add, Button, x486 y72 w70 h22 g【重新加载】, Reload(&R) ; Generated using SmartGUI Creator 4.0 Gui, Show, x161 y206 h650 w1114, 正则文本处理工具v1.0 Return GuiClose: gui,Destroy return 【打开】: FileSelectFile, g_SelectedFile, 3, , 选择需要分析的日志文件, if g_SelectedFile <> { FileRead var_temp, %g_SelectedFile% GuiControl , , _FileContent, %var_temp% } Return 【正则表达式输入框】: Gosub 【匹配】 Return 【匹配】: Gui, submit, NoHide _p子模式= if (RegExMatch(_search,"<(\d+)>$") > 0) { _p子模式:=RegExReplace(_search,"[\s\S]*?<(\d+)>$","$1") ;将末尾的<1234> 数字识别为子模式 _search:=RegExReplace(_search,"<\d+>$") } if _MatchAll ;匹配-1次 { if _search <> { MatchBuf = MatchBuf2 = if _MatchByLine { Loop parse, _FileContent, `n,`r { MatchBuf2 = _zArray :=RegExMatchAll(A_LoopField,_search,-1,_p子模式) if _zArray { for k,v in _zArray { if (MatchBuf2 <> "") MatchBuf2 :=MatchBuf2 . _linkstr . v else MatchBuf2 :=v } } MatchBuf .=(MatchBuf<>"") ? "`n" MatchBuf2 : MatchBuf2 } } else { _zArray :=RegExMatchAll(_FileContent,_search,-1,_p子模式) if _zArray { for k,v in _zArray { if (MatchBuf2 <> "") MatchBuf2 :=MatchBuf2 . _linkstr . v else MatchBuf2 :=v } } MatchBuf :=MatchBuf2 } GuiControl , , _NewContent, %MatchBuf% } Else GuiControl , , _NewContent, Return } else ;匹配1次 { if _search <> { MatchBuf = MatchBuf2 = if _MatchByLine { Loop parse, _FileContent, `n,`r { MatchBuf2 = _zArray :=RegExMatchAll(A_LoopField,_search,,_p子模式) if _zArray { for k,v in _zArray { MatchBuf2 :=v } } MatchBuf .=(MatchBuf<>"") ? "`n" MatchBuf2 : MatchBuf2 } } else { _zArray :=RegExMatchAll(_FileContent,_search,,_p子模式) if _zArray { for k,v in _zArray { MatchBuf2 :=v } } MatchBuf :=MatchBuf2 } GuiControl , , _NewContent, %MatchBuf% } Else GuiControl , , _NewContent, Return } return 【替换字符输入框】: Return 【替换】: Gui, submit, NoHide if _search <> { MatchBuf = if _MatchByLine { Loop parse, _FileContent, `n,`r { if ( !_OnlyRepalceMatch || RegExMatch( A_LoopField, _search ) > 0 ) { var_match := RegExReplace( A_LoopField, _search, _replace ) { MatchBuf .= var_match "`n" } } } } else { if ( !_OnlyRepalceMatch || RegExMatch( _FileContent, _search ) > 0 ) { var_match := RegExReplace( _FileContent, _search, _replace ) { ; msgbox RegExReplace( _FileContent`, %_search%`, %_replace% )`n`n%var_match% MatchBuf := var_match } } } GuiControl , , _NewContent, %MatchBuf% } Else GuiControl , , _NewContent, Return 【重新加载】: Reload Return 【复制】: gui,Submit,NoHide Clipboard :=_NewContent ToolTip,复制到剪切板完成! SetTimer, ffzwjc,-1000 Return ffzwjc: ToolTip return RegExMatchAll(str, re, max_num:=1, re_num="") { arr:=[], pos:=0, r:="",nc:=1 if max_num <>-1 { While (pos:=RegExMatch(str, re, r, pos+StrLen(r)+!StrLen(r))) and (nc<=max_num) { arr.Push( r%re_num% ) nc++ } return, arr.MaxIndex() ? arr : "" } While (pos:=RegExMatch(str, re, r, pos+StrLen(r)+!StrLen(r))) arr.Push( r%re_num% ) return, arr.MaxIndex() ? arr : "" }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)