2016-03-21 23 views
0

Regex'e çok yeni geldim ve projeme gerçekten yardımcı olabilecek küçük bir projeyle mücadele ediyorum. Ünlem işareti (ardışık) dizisi gruplarının nasıl sayılacağını bilmek istiyorum. Mesela burada sayımı aşağıdaki çalıştı 3. dönmelidirregex match ünlem işaretleri java

String s = "OMG!!!, i love Computers !!!! and this !!! is really good!" 

aşağıdaki dize düşünün imkan tanır, ancak ben public static int ünlem (Dize listesi) istediğini hiç benzemez İstisna {

String[] words = (list.split("\\s+")); 
    Pattern pattern = Pattern.compile("\\*?(!!)*\\b"); 
int count = 0; 
for(String s:words) 
{  
    Matcher matcher = pattern.matcher(s);  
    if(pattern.matcher(s) != null) 
    { 
     System.out.println(s); 

    } 
} 

return count; 
atar

}

+1

kullanımı arka referans. ['(!) \ 1 +'] (https://regex101.com/r/fV3kT6/1) – Tushar

+0

Beklenen çıktınız nedir? –

+0

@AvinashRu yazdırma işlevinin, onu yazdırmaya çalışarak doğru şeyi eşleştirip eşleştirmediğimi görmek istedim, ancak tüm bunları yapmak, düz kelimeler basmaktır (bunu büyük bir veri kümesinde test ediyorum), o noktalama yok sayar ve sadece kelimenin tam anlamıyla delirmek olan kelimeyi, – Bobby

cevap

1

Regex'iniz hiç baskı yapmaz! \b'dan dolayı işareti. Regex'iniz, bir kelime karakterinin !'un yanında bulunmasını bekler, ancak gerçekte !'u takip eden bir kelime karakteri değil, kelime olmayan bir karakter alanı vardır.

Pattern pattern = Pattern.compile("\\*?(!{2,})"); 

veya

Pattern pattern = Pattern.compile("!{2,}"); 

DEMO

+0

Görünmüyor geçerli olmak için JAVA :(, düzeltmek için çalışıyorum – Bobby

+0

Üzgünüm, şimdi kontrol edin .. –

+0

Doğru regex. Ama hala kaç tane dizede olduğunu saymıyorum, baskıyı değiştirdim ve arttı her maçtan sonra sayaç ama o kadar bana bile doğru olmayan – Bobby