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?


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)


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".


31

Coba ini:

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

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


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.