如何使用lua模式匹配获取字符串

时间:2011-10-25 11:18:27

标签: lua pattern-matching

下面是我的字符串

local Amount =[[
Customer Details Net Amount
# Seq Name
Amount NTR
1 CDABCDEFGHIJ00564
0,1234
2 CDABCDEFGHIJ00565
0,0361
3 CDABCDEFGHIJ00566
0,0361
4 CDABCDEFGHIJ00567
0,0722
5 CDABCDEFGHIJ00568
0,0000
6 CDABCDEFGHIJ00569
0,0000
7 CDABCDEFGHIJ00570
0,0000
8 CDABCDEFGHIJ00571
0,7091
9 CDABCDEFGHIJ00572
1,4240
10 CDABCDEFGHIJ00573
0,0361
11 CDABCDEFGHIJ00574
0,5790
12 CDABCDEFGHIJ00575
0,4060
13 CDABCDEFGHIJ00576
0,3610
14 CDABCDEFGHIJ00577
0,6859
15 CDABCDEFGHIJ00578
0,2888
16 CDABCDEFGHIJ00579
0,0000
17 CDABCDEFGHIJ00580
0,0000
18 CDABCDEFGHIJ00581
0,0000
19 CDABCDEFGHIJ00582
0,0000
20 CDABCDEFGHIJ00583
0,0000
21 CDABCDEFGHIJ00584
0,0000
22 CDABCDEFGHIJ00585
0,8978
23 CDABCDEFGHIJ00586
0,0000
24 CDABCDEFGHIJ00587
2,3882
25 CDABCDEFGHIJ00588
0,0000
26 CDABCDEFGHIJ00589
2,0216
27 CDABCDEFGHIJ00590
1,7540
28 CDABCDEFGHIJ00591
0,0000
29 CDABCDEFGHIJ00592
0,0722
30 CDABCDEFGHIJ00593
0,0361
31 CDABCDEFGHIJ00594
0,0000
32 CDABCDEFGHIJ00595
0,0000
Total NAT files
11,9269
Direct inquiries to:
]]

执行以下代码

local ptrn = '\n([%d%p]+)\n'
for val1, val2 in string.gmatch(Amount, ptrn) do

    print ("val1:=\t" .. (val1 or '').."\tval2:=\t"..(val2 or ''))

end

基本上从上面的字符串我想要获取字符串的最后5位数字,即val1中的00564和val2变量中的0,1234,但所有这些都应该在一个模式中。这是一条记录,每条记录都以这样的数字开头,这是1条记录或行

1 CDABCDEFGHIJ00564
    0,1234

这是第2条记录或行等等

 2 CDABCDEFGHIJ00565
    0,0361

请求帮助......

1 个答案:

答案 0 :(得分:1)

在我看来,%d+%s+%a+(%d+)\n%s*([%d,]+)应该做到这一点:第一个%d+将捕获行号%s+以匹配之后的空格。 %a+(%d+)将匹配CDABCDEFGHIJ00592并捕获最后的数字(但无法指定您只想要五位数)。 \n%s*将匹配换行符和下一行的任何空格,([%d,]+)将使用逗号捕获最后一个数字。