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

ありがとう

4

2 に答える 2

1

簡単な答えは、句読点の前の数字はパターンではオプションではないということです。単純に a を追加して、できるだけ*多くの数字に一致させますが、数字も許可しません。もう 1 つのオプションは?、1 つの数字のみを一致させるか、またはその前の追加の数字を一致させたくない場合に a を使用することです。

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

これに加えて、考慮したい改善点が他にもいくつかあることに注意してください。たとえば、前の例ではその数字.-が含まれているため、これはその数字を完全に無視し、句読点を a のみを許可するように.変更し、改行要件を少し変更します。

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

パターンの詳細については、Lua でのプログラミングを参照してください。

于 2011-06-03T12:44:23.003 に答える
0

パターンには、小数点の前に数値が必要です。

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-04T08:59:24.990 に答える