RegEx - Kết hợp số lượng độ dài thay đổi


129

Tôi đang cố phân tích một tài liệu có số tham chiếu nằm rải rác trong đó.

Văn bản văn bản văn bản {4: 2} văn bản đáng kinh ngạc hơn {4: 3} muộn hơn nhiều về {222: 115} và một số văn bản nữa.

Các tham chiếu sẽ luôn được gói trong ngoặc và sẽ luôn có dấu hai chấm giữa hai. Tôi đã viết một biểu thức để tìm thấy chúng.

{[0-9]:[0-9]}

Tuy nhiên, điều này rõ ràng thất bại ngay khi bạn bắt gặp một số có hai hoặc ba chữ số và tôi gặp khó khăn trong việc tìm ra điều đó nên là gì. Sẽ không bao giờ có nhiều hơn 3 chữ số {999: 999} là kích thước tối đa để xử lý.

Bất cứ ai cũng có một ý tưởng về một biểu thức thích hợp để xử lý này?


8
Ngay cả khi OP không quan tâm, tôi tò mò: Tại sao downvote cho câu hỏi này? Tôi không thấy có gì sai với nó.
Giăng

3
@ John: Vì một số lý do, mọi người thích downvote câu hỏi trong đó có câu trả lời dễ dàng, đặc biệt là trong regexthẻ.
CanSpice

1
Cuối cùng, câu hỏi này đã có thứ hạng cao hơn trên google và tôi đã tìm thấy câu trả lời của mình trong câu hỏi này.
Jasonfish

Câu trả lời:


131
{[0-9]+:[0-9]+}

thử thêm dấu cộng


Điều này khiến tôi mất quá nhiều thời gian để tìm ... cảm ơn vì thông tin này!
cấp42

76

Bạn đang sử dụng công cụ regex nào? Hầu hết trong số họ sẽ hỗ trợ các biểu thức sau:

\{\d+:\d+\}

Đây \dlà viết tắt thực sự [0-9], nhưng phần quan trọng là bổ sung +có nghĩa là "một hoặc nhiều".


31

Thử cái này:

{[0-9]{1,3}:[0-9]{1,3}}

{1,3}nghĩa là "khớp giữa 1 và 3 của các ký tự trước".


8

Bạn có thể chỉ định số lần bạn muốn mục trước khớp với nhau bằng cách sử dụng {min,max}.

{[0-9]{1,3}:[0-9]{1,3}}

Ngoài ra, bạn có thể sử dụng \dcho các chữ số thay vì [0-9]cho hầu hết các hương vị regex:

{\d{1,3}:\d{1,3}}

Bạn cũng có thể muốn xem xét thoát ra bên ngoài {}, chỉ để làm rõ rằng chúng không phải là một phần của định nghĩa lặp lại.


2
Không, xin vui lòng đừng làm điều đó với hầu hết các hương vị regex, trừ khi bạn yêu thích các chữ số không phải của châu Âu: fileformat.info/info/unicode/carget/Nd/list.htmlm
xanatos

1

{\ d *: \ d *} sẽ hoạt động.

* có nghĩa là khớp 0 hoặc nhiều lần xuất hiện trước đó, là một chữ số.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.