Lua模式在最后一行缺少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   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

但是,当我从下面提到的字符串中删除最后一行的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

谢谢。

原文链接 https://stackoverflow.com/questions/6225586

点赞
stackoverflow用户596285
stackoverflow用户596285

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

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

请注意,除此以外还有几个改进您可能要考虑。例如,由于先前的“.-”将包括该数字,因此这将完全忽略该数字,将标点符号更改为仅允许“。”,并在一定程度上更改换行符要求:

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

有关模式的更多详细信息,请参见《Lua编程》

2011-06-03 12:44:23
stackoverflow用户282536
stackoverflow用户282536

你的模式需要小数点前面有一个数字:

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]+"
2011-06-04 08:59:24