2013-07-27 16 views
7

Tôi đang cố trích xuất một chuỗi các số từ một cột trong Google Tinh chỉnh. Đây là mã của tôi để thực hiện điều đó:Value.match() Regex trong Google Tinh chỉnh

value.match(/[\d]+/)[0] 

Dữ liệu trong cột của tôi là trong các định dạng của

abcababcabc 1234566 abcabcbacdf 

Kết quả là "vô giá trị". Tôi không biết tại sao!! Nó cũng là null nếu thay vì \d Tôi thử \w.

Trả lời

7

OpenRefine không thêm các ký tự đại diện ngầm vào cuối mẫu như một số hệ thống thực hiện (và như một hệ thống có thể mong đợi). Hãy thử mẫu này thay thế:

value.match(/.*?(\d+).*?/)[0] 

Bạn cần loại ký hiệu lười/không tham lam (tức là dấu chấm hỏi) trên ký tự đại diện để chúng không gobble lên một số chữ số của bạn. Nếu bạn chỉ sử dụng /.*(\d+).*/ bạn sẽ chỉ khớp với một chữ số duy nhất vì phần còn lại của chúng sẽ được lấy bởi mẫu *.

Tài liệu đầy đủ để thực hiện có thể được nhìn thấy trong Java Pattern class docs.

+0

Xin chào Tom - Cảm ơn câu trả lời của bạn. Tôi đã thử đề xuất của bạn nhưng tôi vẫn nhận được một NULL – mchangun

+0

Tôi nghĩ có lẽ đó là vì tôi đã sử dụng phiên bản phát triển, nhưng tôi vừa quay lại và cắt và dán dữ liệu chính xác và regex từ trang này vào Refine 2.5 và 1234566 vì vậy tôi không thực sự chắc chắn những gì để đề nghị. –

+0

Nó thực sự hoạt động ngay bây giờ - Tôi đã thử nó trên một đầu vào đó là hơi khác nhau. Bạn có thể giải thích/phân tích cú pháp regex của bạn có nghĩa là gì không? Vòng loại lười biếng/không tham lam là gì? Ngoài ra tài liệu tôi đang đọc dường như không giúp đỡ (https://github.com/OpenRefine/OpenRefine/wiki/Understanding-Regular-Expressions). Có một tài liệu tham khảo giải thích regex trong Open Refine? Cảm ơn bạn! – mchangun

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