2010-03-04 17 views
5

Tôi cần trợ giúp với regex khớp với một số. Tôi cần tối đa 3 chữ số sau dấu chấm (.):trợ giúp với Regex - cần tối đa 3 số sau dấu chấm (.)

 
12345 ok 
12  ok 
12.1  ok 
12.12 ok 
12.123 ok 
12.1234 Error 
1.123456 Error 

cách thực hiện? Cảm ơn trước.

+3

'12.': ok hoặc lỗi? '.123' ok hoặc lỗi? '.': ok hoặc lỗi? –

Trả lời

3

Bạn có thể thử:

^\d+|(\d+\.\d{1,3})$ 
  • \d - Độc chữ số
  • \d+ - một hoặc nhiều chữ số, đó là một số .
  • \. - dấu chấm là một siêu sao..so để khớp với một dấu chấm ngang , bạn sẽ cần phải thoát khỏi số .
  • {1,3} - từ 1 đến 3 (cả hai bao gồm) các lần lặp lại của điều trước đó.
  • ^$ - Neo để chúng tôi khớp với tất cả mọi thứ toàn bộ không chỉ là một phần của thứ gì đó.
13
\d+(?:\.\d{1,3})? 

Giải thích:

 
\d+  # multiple digits 
(?:  # start non-capturing group 
    \.  # a dot 
    \d{1,3} # 1-3 digits 
)?   # end non-capturing group, made optional 
+0

+1 để giải thích rõ ràng – IAbstract

1

Bạn có chắc chắn bạn cần regex để giải quyết vấn đề bạn đang gặp? Làm thế nào về:

bool ContainsAtMostThreeNumbersAfterDot(string str) 
{ 
    int dotIndex = str.IndexOf("."); 
    float f; 
    return float.TryParse(str, out f) && str.Length - dotIndex < 3; 
} 

Mã này cũng không hoàn chỉnh hoặc chính xác 100% (mất là cũng giống như một ý tưởng và xử lý các trường hợp cụ thể cho mình), nhưng IMHO, nó thể hiện mục đích rất nhiều cách rõ ràng hơn so với sử dụng một regex để giải quyết vấn đề không cần regex.

+3

'/ \ d + (?: \. \ D {1,3})? /' Đọc khá rõ ràng với tôi ... –

+0

... đọc rõ ràng cho bất kỳ ai biết regex. Không thể hiện ý định ở tất cả cho bất kỳ ai không quen thuộc với các biểu thức chính quy và là một overkill của sức mạnh của biểu thức thông thường cho một vấn đề mà có một giải pháp dễ dàng hơn và dễ đọc hơn. – Marek

+0

Làm thế nào đây là một overkill? Đối với những người biết regex, ứng dụng này rơi hoàn toàn vào vị trí ngọt ngào của ngôn ngữ. Và bạn không thể nghiêm túc về giải pháp của mình dễ dàng hơn và dễ đọc hơn. Tôi thậm chí không biết 'TryParse' làm gì mà không tra cứu API. – polygenelubricants

Các vấn đề liên quan