2017-03-27 36 views
8

Girdi, bu grubu bir veya daha fazla kez içerebilen bir desenle eşleşen grupları yakalamak istiyorum.Regex: Varsa bir veya daha fazla grup yakalayın (Java)

Örnek:

input = 12361 randomstuff371 12 Mar 16 138more random381 stuff73f 

ben "12 Mar 16" yakalamak istiyoruz. Bundan

kolayca regex kullanmış:

benim sorunum girdi bu grupların birden fazlasını içerebilir, ben sonraki maçları yakalamak mümkün değilim ki Ancak
pattern = (".*(\\d{2}\\s\\w+\\s\\d{2}).*"); 

.

Örnek:

input = randomstuff371 12 Mar 16 14 Jan 15 13 Feb 16 138more random381 stuff73f 

Öyle ki:

group 1 = 12 Mar 16 
group 2 = 14 Jan 15 
group 3 = 13 Feb 16 

girdileri üzerinde çalışacak bir düzenli ifade varsa bu grupların sayısı o kadar merak ediyorum hep değişecektir maç, ve Bu grupların 1 veya daha fazlasını içerir. Ben denedim:

pattern = (".*(\\d{2}\\s\\w+\\s\\d{2}\\s)+.*"); \\ Not sure about whitespace at the end 

O çalışmıyor Ancak. Bu yakalanan grupları nasıl sakladığımla ilgili daha fazla şey var mı? İhtiyacım olan grupların sayısını önceden belirleyemem, özellikle de düzenli ifadelerin bu girdilerin çoğunda çalışması gerekiyor.

Sanırım tüm tarih segmentlerini yakalama ve daha sonra gereksinim duyduğum grup sayısını saymak için matcher.find() ile işleme koyma konusunda daha iyiyim.

Herhangi bir yardım çok takdir edilecektir.

+0

Bu,. * 'Nin ön ve arka yüzünden. Bunu yapma. –

+0

@James, eğer sizin için işe yararsa cevabı kabul etmeyi düşünün (bkz. [SO cevaplarını nasıl kabul edilir] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)). –

cevap

13

Tıpkı seninki özel kalıpla eşleşen ve Matcher#find() kullanılarak elde birden maçların olarak alt dizeleri almak için daha kolay olacaktır:

String s = "randomstuff371 12 Mar 16 14 Jan 15 13 Feb 16 138more random381 stuff73f"; 
Pattern pattern = Pattern.compile("\\b\\d{2}\\s\\w+\\s\\d{2}\\b"); 
Matcher matcher = pattern.matcher(s); 
while (matcher.find()){ 
    System.out.println(matcher.group(0)); 
} 

online Java demo ve regex demo bakınız.

Desenin tüm sözcük olarak eşleştiğinden emin olmak için desteğe sözcük sınırları ekledim, ancak alt dizeleriniz başka bir metne yapıştırılmışsa atlanabilirler.

İlgili konular