Chcę przechwytywać grupy pasujące do wzorca, w którym dane wejście może zawierać tę grupę raz lub więcej razy.Regex: Przechwytuje jedną lub więcej grup, jeśli istnieje (Java)
Przykład:
input = 12361 randomstuff371 12 Mar 16 138more random381 stuff73f
Chcę uchwycić "12 mar 16".
Od tego mam łatwo wykorzystane regex:
pattern = (".*(\\d{2}\\s\\w+\\s\\d{2}).*");
Jednak moim problemem jest to, że gdy wejście może zawierać więcej niż jeden z tych grup, nie jestem w stanie uchwycić kolejne mecze.
Przykład:
input = randomstuff371 12 Mar 16 14 Jan 15 13 Feb 16 138more random381 stuff73f
taka, że:
group 1 = 12 Mar 16
group 2 = 14 Jan 15
group 3 = 13 Feb 16
Liczba tych grup, aby dopasować zawsze będzie się zmieniać, a więc zastanawiam się, czy jest regex, który będzie pracować nad wejściami które zawierają 1 lub więcej z tych grup. Próbowałem:
pattern = (".*(\\d{2}\\s\\w+\\s\\d{2}\\s)+.*"); \\ Not sure about whitespace at the end
Jednak to nie działa. Czy jest to bardziej związane z przechowywaniem tych przechwyconych grup? Nie mogę z góry określić liczby grup, które będę potrzebować, zwłaszcza, że regex musi pracować nad wieloma z tych danych wejściowych.
Czuję się tak, jakbym był lepszy od przechwytywania całego segmentu dat i radzenia sobie z nim później z matcher.find()
, aby policzyć liczbę grup, które wymagam.
Każda pomoc będzie doceniana.
Wynika to z ". *" Z przodu iz tyłu. Nie rób tego. –
@ James, rozważ zaakceptowanie odpowiedzi, jeśli zadziałało dla Ciebie (patrz [Jak akceptować odpowiedzi SO] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)). –