rmajly 发表于 2024-1-25 00:58:49

正则匹配类笔记

正则匹配

2023年11月12日0:32

1、今天是2023年11月11日双十一节,\d{4}\年\d{2}\月\d{2}日得到:2023年11月11日

2、转换时间格式为yyyy-mm-dd:
io.open();//打开控制台

var str = /*
2000-3-03
2001-10-1
2001-2-2
*/            
str=string.replace(str,"-(\d)!<\D>","-0\1",)
io.print(str );

execute("pause") //按任意键继续
io.close();//关闭控制台
3、提取数字;
io.open();//打开控制台
      
text=/*
使用777777可以第一时间收5555786到“提问有新5687987回答”“回答被采纳”“网友求助”的通6598546
您想在自己的网站上展示百度“知道”上的5264859问答吗?来吧! 如要投诉或提5985468出意见建议。
*/
      
for m in string.gmatch( text,"\d+") {
   io.print(m)
}
execute("pause") //按任意键继续
io.close();//关闭控制台
4、换行了都能匹配:
import console;
import web.mshtml

var html = /*
<img src="afds123
fdgd.jpg"

/>
<div>
      <img src=
      "aaabbbccc.jpg"
      
      />
</div>

*/

var mshtm = web.mshtml();
mshtm.write( html )

for i,img in mshtm.eachAll("img") {
      console.log(i, img.src )
}

console.pause(true);
5、多种格式的数据一次性匹配出来
import console;
io.open();//打开控制台

str = /*
<a href='maxred.aspx?ID=56869657' target="_blank">稿件1309753</a>
<td align="center" valign="middle" style="width:50px;"></td>
<td align="left" valign="middle" style="width:60px;">
<div class="per_y">0%</div></td>
<td align="center" valign="middle" style="width:60px;">
26.1%</td>
<td align="center" valign="middle" style="width:60px;">
31.5%</td>
#-------------------------------------------------------------------------
<a href='maxred.aspx?ID=56869657' target="_blank">稿件1209751</a>
<td align="center" valign="middle" style="width:50px;"></td>
<td align="left" valign="middle" style="width:60px;">
<div class="per_y">12.3%</div></td>
<td align="center" valign="middle" style="width:60px;">
56.1%</td>
<td align="center" valign="middle" style="width:60px;">
63.2%</td>
*/

for m, m1 in string.gmatch(str, '\\<a.+?稿件([^\\<]+).+?<@per_y">@>(.+?)\\<.+?')
    io.print(m, m1)

console.pause(true);
6、提取二维数组;
import win.ui;
/*DSG{{*/
var winform = ..win.form(text="aardio Form";right=599;bottom=399;parent=...)
winform.add(
button={cls="button";text="提数组";left=445;top=318;right=551;bottom=353;z=2};
edit={cls="edit";left=17;top=26;right=394;bottom=223;edge=1;multiline=1;z=1}
)
/*}}*/

func = function(str) begin
      var ret = {};
      for m in string.gmatch(str,"start,(.+?)end;") {
                var t = {}
                for m2 in string.gmatch(m,"\:(.+?)\,") {
                        table.push(t, m2)
                }
                table.push(ret, t)
      }
      
      return ret;
end;

lineShow = function(line) begin
      winform.edit.text += (line + '\r\n')
end;

winform.button.oncommand = function(id,event){
      var str = 'start,1:aaaa,2:bbbb,3:cccc,4:dddd,end;start,1:eeee,2:ffff,3:gggg,4:hhhh,end;'
      lineShow('解析前:\r\n' + str)
      
      lineShow("解析后:")
      var array = func(str)      
      for(i=1;#array;1){
                var t = array;
                lineShow("---" + i + "---")
                for(j=1;#t;1){
                        lineShow(j + ") " + t)               
                }      
      }
}

winform.show()
win.loopMessage();
另一种二维数组提取法:
import win.ui;
/*DSG{{*/
var winform = win.form(text="模式匹配测试程序";right=599;bottom=399;)
winform.add(
button={cls="button";text="提数组";left=445;top=318;right=551;bottom=353;z=2};
edit={cls="edit";left=17;top=26;right=394;bottom=223;edge=1;multiline=1;z=1}
)
/*}}*/

winform.button.oncommand = function(id,event){
      
    var array = {}
      for m1,m2,m3,m4 in string.gmatch(
                'start,1:aaaa,2:bbbb,3:cccc,4:dddd,end;start,1:eeee,2:ffff,3:gggg,4:hhhh,end;',"start,1\:(\S+?),2\:(\S+?),3\:(\S+?),4\:(\S+?),end;"
      ) {
                //添加到二维数组
                table.push( array, {m1;m2;m3;m4} )
               
                //写入文本框
                winform.edit.appendText( m1,m2,m3,m4 ,'\r\n')
      }
      
      //在文本框中显示二维数组
      winform.edit.appendText( table.tostring(array),'\r\n' )
}

winform.show()
win.loopMessage();

风行者 发表于 2024-1-25 08:56:26

感谢分享
页: [1]
查看完整版本: 正则匹配类笔记