当最后一行中缺少0时,Lua模式无法正常工作

当最后一行中缺少0时,Lua模式无法正常工作,lua,lua-patterns,Lua,Lua Patterns,下面是我的模式,它在给定字符串上运行良好 local tempRec = [[ ABC01-USD-0322-A Total DUE amount : 2312.08 USD Value Date : 31 MAY 2011 Details:ABCDE - BCD: / ABC01 0212 23.79 / ARM01 0311 870.79 Details:FGHIJ - BCD: / ABC01 0323 1.88 Details:KLMNO - BCD:

下面是我的模式,它在给定字符串上运行良好

local tempRec = [[

ABC01-USD-0322-A Total DUE amount : 2312.08  USD
Value Date : 31 MAY       2011
   Details:ABCDE - BCD: / ABC01 0212 23.79 / ARM01 0311 870.79
   Details:FGHIJ - BCD: / ABC01 0323 1.88
   Details:KLMNO - BCD: / ABC01 0314 1,035.99
   Details:PQRST - BCD: / ABC01 0315 677.61
   Details:UVWXY - BCD: / ABC01 0316 362.75
   Details:ZABCD - BCD: / ABC01 0317   0.28

   ]]

paytternToMatch = "(%w%w%w[%w%d][%w%d]%-.-%d%p%d%d\n)\n[\n]*"

 for w in string.gmatch(tempRec, paytternToMatch) do
       print(w)
 end
但是当我从下面的mentioed字符串的最后一行中删除0时。模式不匹配。任何帮助都将被告知

local tempRec = [[

ABC01-USD-0322-A Total DUE amount : 2312.08  USD
Value Date : 31 MAY       2011
   Details:ABCDE - BCD: / ABC01 0212 23.79 / ARM01 0311 870.79
   Details:FGHIJ - BCD: / ABC01 0323 1.88
   Details:KLMNO - BCD: / ABC01 0314 1,035.99
   Details:PQRST - BCD: / ABC01 0315 677.61
   Details:UVWXY - BCD: / ABC01 0316 362.75
   Details:ZABCD - BCD: / ABC01 0317   .28

   ]]
paytternToMatch = "(%w%w%w[%w%d][%w%d]%-.-%d%p%d%d\n)\n[\n]*"

 for w in string.gmatch(tempRec, paytternToMatch) do
       print(w)
 end

谢谢

简而言之,标点符号前的数字在您的模式中不是可选的。只需添加一个
*
,以匹配尽可能多的数字,但也不允许使用任何数字。另一个选项是使用
,如果您只想匹配单个数字或不匹配任何数字,而不想匹配之前的任何其他数字

paytternToMatch = "(%w%w%w[%w%d][%w%d]%-.-%d*%p%d%d\n)\n[\n]*"
--                                          ^ here
<>请注意,除此之外,还有一些其他的改进。例如,这将完全忽略该数字,因为前面的
-
将包含该数字,将标点更改为仅允许
,并稍微更改换行要求:

paytternToMatch = "(%w%w%w[%w%d][%w%d]%-.-%.%d%d\n)\n+"

有关模式的详细信息,请参阅。

您的模式要求小数点前有一个数字:

paytternToMatch = "(%w%w%w[%w%d][%w%d]%-.-%d*%p%d%d\n)\n[\n]*"
此外,您可能希望获得更合理的捕获:

paytternToMatch = "(%w%w%w[%w%d][%w%d])%-.-(%d*%p%d%d)\n[\n]+"

你想从那根弦中提取什么?@B米奇,看来你的答案很好。我将根据您提供的模式进行更多测试。我必须感谢您的大力支持。Payterntomatch=“(%w%w%w[%w%d][%w%d])%-。-(%d*%p%d%d)\n[\n]+”不起作用,只获取“ABC01”