I need to check that a file contains some amounts that match a specific format:
- between 1 and 15 characters (numbers or “,”)
- may contains at most one “,” separator for decimals
- must at least have one number before the separator
- this amount is supposed to be in the middle of a string, bounded by alphabetical characters (but we have to exclude the malformed files).
I currently have this:
\d{1,15}(,\d{1,14})?
But it does not match with the requirement as I might catch up to 30 characters here.
Unfortunately, for some reasons that are too long to explain here, I cannot simply pick a substring or use any other java call. The match has to be in a single, java-compatible, regular expression.
^start of the string(?=.{1,15}$)positive lookahead to make sure that the total length of string is between 1 and 15\d+one or more digit(s)(,\d+)?optionally followed by a comma and more digits$end of the string (not really required as we already checked for it in the lookahead).You might have to escape backslashes for Java:
^(?=.{1,15}$)\\d+(,\\d+)?$update: If you’re looking for this in the middle of another string, use word boundaries
\binstead of string boundaries (^and$).For java:
More readable version: