Không chắc tôi cũng hiểu nhu cầu của bạn, nhưng tôi nghĩ rằng bạn có thể sử dụng ranh giới từ như:
\b([1-9]\d*[.,]\d{2})\b
Để không phù hợp với ngày tháng, bạn có thể sử dụng:
(?:^|[^.,\d])(\d+[,.]\d\d)(?:[^.,\d]|$)
giải thích:
The regular expression:
(?-imsx:(?:^|[^.,\d])(\d+[,.]\d\d)(?:[^.,\d]|$))
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with^and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
(?: group, but do not capture:
----------------------------------------------------------------------
^ the beginning of the string
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
[^.,\d] any character except: '.', ',', digits
(0-9)
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
[,.] any character of: ',', '.'
----------------------------------------------------------------------
\d digits (0-9)
----------------------------------------------------------------------
\d digits (0-9)
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
(?: group, but do not capture:
----------------------------------------------------------------------
[^.,\d] any character except: '.', ',', digits
(0-9)
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
$ before an optional \n, and the end of
the string
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
Tôi hơi bối rối. Bạn đang sử dụng cụm từ thông dụng nào? Đầu tiên hoặc thứ hai. Và bạn chỉ muốn tìm kết quả cuối cùng, đúng không? –
Lưu ý rằng '[a | b]' là 'a' hoặc' | 'hoặc' b'. Trong danh sách ký tự, '|' là * không * một dấu phân cách thay thế. Vì vậy, '[.,]' Nên là những gì bạn muốn. Nhưng đối với tất cả tôi có thể nói, regexp thứ hai nên làm việc. –
Tôi sử dụng cả hai ... Tôi có priceFormats.add ("([1-9] [0-9] * [\\. |,] [0-9] {2}) [^ \\. \\ d ] (. *) "); và priceFormats.add ("^ ([1-9] [0-9] * [\\. |,] [0-9] {2}) $"); ... nó là Danh sách các định dạng giá và sau đó có một chu kỳ mà tôi áp dụng cho (int i = 0; i