Шаблон Lua не работает должным образом, когда 0 отсутствует в последнем ряду - PullRequest
0 голосов
/ 03 июня 2011

ниже - мой шаблон, который отлично работает с данной строкой.

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

Спасибо

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Короткий ответ: цифра перед знаками препинания не является обязательной в вашем шаблоне.Просто добавьте *, чтобы соответствовать какому-либо количеству цифр, но также и без цифр.Другой вариант - использовать ?, если вы хотите сопоставить только одну цифру или не указывать ее, но без каких-либо дополнительных цифр до этого.

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+"

См. Программирование на Lua для более подробной информации о шаблонах.

0 голосов
/ 04 июня 2011

Для вашего паттерна требуется число перед десятичной точкой:

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]+"
...