lua-users home
lua-l archive

Re: Capture patterns

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Jan 8, 2008 7:04 AM, Jeff Wise <jwise@sealyrealty.com> wrote:
> Look at all these possible formats:
>
> 1. 100ドル.00
> 2. .00
> 3. 100,000.00
> 4. -1,234.56
> 5. (1,234.56)
> 6. 1,234.56CR
> 7. 1,234.56-
> 8. +100.00
If you strip out the superfluous characters:
 input = string.gsub(input, "[,ドル%+%s]", "")
It reduces the number of formats to 6.
One approach is just to try every valid pattern until one sticks:
 -- I have no idea what 'CR' appended to a number means,
 -- so I'll pretend it means negative...
 function match_number(s)
 s = s:gsub("[,ドル+%s]", "") -- strip garbage
 local n =
 s:match("%-(%d+%.%d+)") -- -22.22
 or s:match("(%d+%.%d+)%-") -- 22.22-
 or s:match("%((%d+%.%d+)%)") -- (22.22)
 or s:match("(%d+%.%d+)CR") -- 22.22CR
 return n and -n
 or s:match("(%d+%.%d+)") -- 22.22
 or s:match("(%.%d+)") -- .22
 end
Or you could use one pattern and test if you caught any of the extra stuff:
 function match_number(s)
 s = s:gsub("[,ドル+%s]", "") -- strip garbage
 local pre, n, post = s:match("([-(]?)(%d*%.%d+)([CR-]?)")
 return (pre ~= "" or post ~= "") and -n or n
 end
I'm sure there are a dozen other ways to skin this cat, but I've gotta
get to work...
> I think that the section could be better
> organized by covering the "magic characters" in
> order instead of randomly. This would make the
> text more useful as a reference
Check out the online manual. It has exactly what you want. :)
Cheers,
Eric

AltStyle によって変換されたページ (->オリジナル) /