正则匹配类笔记
正则匹配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();
感谢分享
页:
[1]