RegEx - Değişken Uzunluktaki Eşleşme Numaraları


131

Başına dağılmış referans numaraları olan bir belgeyi çözümlemeye çalışıyorum.

Metin metni metni {4: 2} çok daha sonra {222: 115} daha inanılmaz metin {4: 3} ve biraz daha metin.

Referanslar her zaman parantez içine alınacak ve ikisi arasında her zaman iki nokta üst üste olacaktır. Onları bulmak için bir ifade yazdım.

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

Ancak, iki veya üç basamaklı bir sayı ile karşılaştığınız anda bu açıkça başarısız oluyor ve bunun ne olması gerektiğini bulmakta zorlanıyorum. Hiçbir zaman 3 basamaktan fazla olmayacak {999: 999} başa çıkılabilecek maksimum boyuttur.

Bununla başa çıkmak için uygun bir ifade fikri olan var mı?


8
OP umursamasa bile, merak ediyorum: Neden bu soruya olumsuz oy veriliyor? Bunda yanlış bir şey görmüyorum.
John

3
@John: Bazı nedenlerden dolayı insanlar, özellikle regexetiketinde kolay yanıtların olduğu sorulara olumsuz oy vermeyi severler .
CanSpice

1
Sonunda bu soru google'da daha üst sıralarda yer aldı ve cevabımı bunda buldum.
Jasonfish

Yanıtlar:



76

Hangi normal ifade motorunu kullanıyorsunuz? Çoğu şu ifadeyi destekleyecektir:

\{\d+:\d+\}

\dAslında kısaltmadır içindir [0-9], ama önemli bir parçası eklenmesidir +hangi yollarla "bir veya birden fazla".


31

Bunu dene:

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

{1,3}Aracı "önceki karakter 1 ile 3 maç".


8

Tuşunu kullanarak önceki öğenin kaç kez eşleşmesini istediğinizi belirtebilirsiniz {min,max}.

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

Ayrıca, çoğu normal ifade çeşidi \dyerine rakamlar için kullanabilirsiniz [0-9]:

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

Ayrıca dıştan kaçmayı düşünebilir {ve }sadece bir tekrar tanımının parçası olmadıklarını netleştirmek isteyebilirsiniz .


2
: Hayır olmayan avrupa basamak sevmezseniz en regex lezzetleri ile bunu yapmayın lütfen fileformat.info/info/unicode/category/Nd/list.htm
Xanatos

1

{\ d *: \ d *} çalışmalıdır.

*, bir rakam olan 0 veya daha fazla önceki oluşumla eşleşme anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.