RegEx - Cocokkan Jumlah Panjang Variabel

131

Saya mencoba untuk mengurai dokumen yang memiliki nomor referensi berserakan di dalamnya.

Teks teks teks {4: 2} teks yang lebih luar biasa {4: 3} lebih lama lagi {222: 115} dan beberapa teks lagi.

Referensi akan selalu berada dalam tanda kurung, dan akan selalu ada titik dua di antara keduanya. Saya menulis ekspresi untuk menemukan mereka.

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

Namun, ini jelas gagal saat Anda menemukan dua atau tiga digit angka, dan saya kesulitan mencari tahu apa yang seharusnya. Tidak akan pernah ada lebih dari 3 digit {999: 999} adalah ukuran maksimum untuk ditangani.

Ada yang punya ide ekspresi yang tepat untuk menangani ini?

Jarrod Nettles
sumber
8
Bahkan jika OP tidak peduli, saya penasaran: Mengapa downvote untuk pertanyaan ini? Saya tidak melihat ada yang salah dengan itu.
Yohanes
3
@ John: Untuk beberapa alasan, orang suka memberikan suara negatif pada pertanyaan yang memiliki jawaban yang mudah, terutama di regextag.
CanSpice
1
Pada akhirnya pertanyaan ini mendapat peringkat yang lebih tinggi di google dan saya menemukan jawaban saya di pertanyaan ini.
Jasonfish

Jawaban:

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

coba tambahkan plus (es)

asal
sumber
Ini butuh waktu terlalu lama untuk saya temukan ... terima kasih atas informasi ini!
level42
76

Mesin regex apa yang Anda gunakan? Kebanyakan dari mereka akan mendukung ekspresi berikut:

\{\d+:\d+\}

Itu \dsebenarnya adalah singkatan dari [0-9], tapi bagian yang penting adalah penambahan +yang artinya "satu atau lebih".

Lily Ballard
sumber
31

Coba ini:

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

The {1,3}berarti "cocok antara 1 dan 3 karakter sebelumnya".

CanSpice
sumber
8

Anda dapat menentukan berapa kali Anda ingin item sebelumnya cocok dengan menggunakan {min,max}.

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

Selain itu, Anda dapat menggunakan \duntuk digit, bukan [0-9]untuk kebanyakan ragam regex:

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

Anda mungkin juga ingin mempertimbangkan keluar dari luar {dan }, hanya untuk memperjelas bahwa mereka bukan bagian dari definisi pengulangan.

Andrew Clark
sumber
2
Tidak, jangan lakukan dengan sebagian besar rasa regex, kecuali Anda menyukai angka non-eropa: fileformat.info/info/unicode/category/Nd/list.htm
xanatos
1

{\ d *: \ d *} seharusnya berfungsi.

* berarti kecocokan 0 atau lebih dari kejadian sebelumnya, yang merupakan digit.

Ryan Y
sumber