RegEx - Dopasuj liczby o zmiennej długości

131

Próbuję przeanalizować dokument zawierający zaśmiecone numery referencyjne.

Tekst tekstowy {4: 2} bardziej niesamowity tekst {4: 3} znacznie później {222: 115} i jeszcze trochę więcej tekstu.

Odnośniki zawsze będą zawarte w nawiasach, a między nimi będzie zawsze dwukropek. Napisałem wyrażenie, aby je znaleźć.

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

Jednak to oczywiście zawodzi w momencie, gdy napotkasz dwu- lub trzycyfrową liczbę i mam problem ze zrozumieniem, co to powinno być. Nigdy nie będzie więcej niż 3 cyfry {999: 999} to maksymalny rozmiar, z którym można sobie poradzić.

Czy ktoś ma pomysł na odpowiednie wyrażenie, aby to załatwić?

Jarrod Nettles
źródło
8
Nawet jeśli OP to nie obchodzi, jestem ciekawy: dlaczego głosowano przeciw temu pytaniu? Nie widzę w tym nic złego.
John,
3
@John: Z jakiegoś powodu ludzie lubią negatywnie oceniać pytania, na które są łatwe odpowiedzi, zwłaszcza w regextagu.
CanSpice,
1
W końcu to pytanie dostało wyższą rangę w Google i znalazłem odpowiedź w tym.
Jasonfish

Odpowiedzi:

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

spróbuj dodać plus (y)

geneza
źródło
Zbyt długo zajęło mi znalezienie ... dziękuję za te informacje!
level42
76

Jakiego silnika regex używasz? Większość z nich będzie obsługiwać następujące wyrażenie:

\{\d+:\d+\}

W \drzeczywistości jest skrótem [0-9], ale ważną częścią jest dodanie, +które oznacza „jeden lub więcej”.

Lily Ballard
źródło
31

Spróbuj tego:

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

Te {1,3}środki „dopasowania pomiędzy 1 i 3 z poprzednich znaków”.

CanSpice
źródło
8

Możesz określić, ile razy chcesz dopasować poprzedni element, używając {min,max}.

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

Możesz także użyć \ddla cyfr zamiast [0-9]dla większości odmian wyrażeń regularnych:

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

Możesz także rozważyć ucieczkę od zewnętrznego {i }tylko po to, aby było jasne, że nie są one częścią definicji powtórzeń.

Andrew Clark
źródło
2
Nie, nie rób tego z większością
odmian wyrażeń
1

{\ d *: \ d *} powinno działać.

* oznacza dopasowanie 0 lub więcej poprzedzających wystąpień, które jest cyfrą.

Ryan Y
źródło