2012-02-29 43 views
5

Tôi có mô hình này:Biểu thức chính quy Java cho số âm?

Pattern.compile("T([0-9]*)");

mà hoạt động tốt cho các số dương nhưng tôi cần nó cũng làm số âm ví dụ "T-1T3T44" nên làm việc. Hoặc có thể sử dụng không gian thay vì 'T' vì vậy nó sẽ làm việc cho các chuỗi như thế này: "- 1 2 3 2 -1 6 2". Xin lỗi tôi đã không thực sự sử dụng biểu thức chính quy trước đây. Vì vậy, bất kỳ đề xuất? Cảm ơn.

+0

http://regexlib.com/DisplayPatterns.aspx?cattabindex=2&categoryId=3 – vulkanino

+0

Xin lỗi tôi đã chỉnh sửa câu trả lời cho không gian thay vì T. – Fofole

Trả lời

5

Bạn đã nghĩ đến việc cố gắng:

"T(-?[0-9]+)" 

Bạn sẽ nhận thấy tôi cũng đã thay đổi "*" (zero hoặc hơn) để "+" (một hoặc nhiều) từ "" không phải là về mặt kỹ thuật một số: -)

+1

Điều này không hoàn toàn chính xác, vì nó cho phép: -0. Zero không thể âm. Để xem cách đối phó với điều đó, hãy xem câu trả lời của tôi. – Lukasz

+0

@Fofole: có, chỉ cần thay thế bằng một khoảng trống trong regex, không có vấn đề gì. Lukasz, vâng, nếu bạn muốn không cho phép tiêu cực số không, bạn sẽ cần một cái gì đó phức tạp hơn. Cá nhân, tôi nghĩ rằng đó là tiếp cận giai đoạn hậu môn-retentive nhưng tôi thấy quan điểm của bạn :-) – paxdiablo

+0

Cảm ơn. Điều này dễ hiểu hơn và tôi không thực sự cần phải kiểm tra -0 khi tôi xây dựng chuỗi chính xác, vì vậy tôi gắn cờ đây là câu trả lời được chấp nhận. Hy vọng rằng mọi người đều hạnh phúc về điều này. – Fofole

1
Pattern.compile("T-?([0-9]*)"); 
3

Hãy thử với:

Pattern.compile("T(-?[0-9]*)"); 
1

M ake tùy chọn trừ có thể là?

T - ([0-9] *)

9
Pattern.compile("T(-{0,1}(?!0)\\d+)"); 

Xin lưu ý việc sử dụng tiêu cực nhìn về phía trước để loại trừ (?!0) -0 số và số bắt đầu bằng 0.

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