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ć?


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)


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


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


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.