Tôi sẽ đặt nó ở ngay đó: Tôi kinh khủng với các biểu thức chính quy. Tôi đã cố gắng đưa ra một giải pháp để giải quyết vấn đề của mình nhưng tôi thực sự không biết nhiều về chúng. . .Cụm từ thông dụng để khớp với các thứ nguyên đối tượng
Hãy tưởng tượng một số câu dọc theo dòng sau đây:
- Xin chào blah blah. Đó là khoảng 11 1/2 "x 32".
- Kích thước là 8 x 10-3/5!
- Có lẽ ở đâu đó trong khu vực 22 "x 17".
- Các cuộn là khá lớn: 42 1/2" ... X 60 yd
- Họ đều là 5,76 8 khung
- Ừ, có lẽ nó dài khoảng 84cm
- tôi nghĩ về 13/19" .
- Không, có thể là 86 cm.
Tôi muốn, càng sạch càng tốt, trích xuất các thứ nguyên mục từ trong các câu này. Trong một thế giới hoàn hảo biểu thức chính quy sẽ ra như sau:
- 11 1/2" x 32"
- 8 x 10-3/5
- 22" x 17"
- 42 1/2" x 60 yd
- 5,76 8
- 84cm
- 13/19"
- 86 cm
Tôi tưởng tượng một thế giới mà các quy tắc sau được áp dụng:
- Sau đây là đơn vị hợp lệ:
{cm, mm, yd, yards, ", ', feet}
, mặc dù tôi muốn một giải pháp mà coi một bộ tùy tiện của các đơn vị chứ không phải là một rõ ràng giải pháp cho các đơn vị trên. - Thứ nguyên luôn được mô tả bằng số, có thể hoặc không thể có các đơn vị theo dõi nó và có thể có hoặc không có phần phân số hoặc thập phân. Việc tạo thành một phần phân đoạn trên chính nó là được cho phép, ví dụ:
4/5"
. - Các bộ phận phân đoạn luôn có một số
/
tách tử số/mẫu số, và người ta có thể giả định không có khoảng cách giữa các phần (mặc dù nếu ai đó tính đến điều đó thật tuyệt vời!). - Kích thước có thể là một chiều hoặc hai chiều, trong trường hợp đó, người ta có thể giả định những điều sau đây có thể chấp nhận được để tách hai thứ nguyên:
{x, by}
. Nếu thứ nguyên chỉ là một chiều, thì phải có các đơn vị từ tập hợp ở trên, tức là,22 cm
là OK,.333
không phải là, cũng không phải là4.33 oz
.
Để cho bạn thấy tôi vô dụng với biểu thức chính quy (và ít nhất là cho tôi thấy), tôi đã đạt được điều này. . .
[1-9]+[/ ][x1-9]
Update (2)
Các bạn rất nhanh và hiệu quả! Tôi sẽ thêm một vài thêm trường hợp thử nghiệm chưa được bao phủ bởi các biểu thức thông thường bên dưới:
- cuối cùng nhưng có một trường hợp thử nghiệm là 12 yd x.
- Trường hợp thử nghiệm cuối cùng là 99 cm.
- Câu này không có kích thước trong nó: 342/5553/222.
- Ba thứ nguyên? 22 "x 17" x 12 cm
- Đây là mã sản phẩm: c720 với số khác 83 x tốt hơn.
- Một số riêng. 21.
- Khối lượng không được khớp với 0,32 oz.
Những nên dẫn đến việc sau (# chỉ ra không có gì phải phù hợp):
- 12 yd
- 99 cm
- #
- 22" x 17" x 12 cm
- #
- #
- #
Tôi đã thích nghi M42's câu trả lời dưới đây, để:
\d+(?:\.\d+)?[\s-]*(?:\d+)?(?:\/\d+)?(?:cm|mm|yd|"|'|feet)(?:\s*x\s*|\s*by\s*)?(?:\d+(?:\.\d+)?[\s*-]*(?:\d+(?:\/\d+)?)?(?:cm|mm|yd|"|'|feet)?)?
Nhưng trong khi đó giải quyết một số trường hợp thử nghiệm mới nó bây giờ không phù hợp với những người khác sau.Nó báo cáo:
- 11 1/2" x 32" PASS
- (không có gì) FAIL
- 22" x 17" PASS
- 42 1/2" x 60 yd PASS
- (không có gì) FAIL
- 84cm PASS
- 13/19" PASS
- 86 cm PASS
- 22" PASS
- (không có gì) FAIL
(không có gì) FAIL
12 yd x FAIL
- 99 cm bởi FAIL
- 22" x 17" [và cũng có thể, nhưng riêng '12 cm '] FAIL
PASS
PASS
bạn coud vui lòng cung cấp các chuỗi đầu vào và ouput dự kiến là bao nhiêu? – Toto
Chắc chắn. Tôi đã cung cấp cho họ một định dạng dễ dàng hơn cho bạn ở đây: http://pastebin.com/txfJs8LX Cảm ơn rất nhiều! – Edwardr