2014-06-17 22 views
11

"(" ve ")"'dan dize, desen eşleştirmesi veya herhangi bir şey kullanılarak nasıl ayıklanır. Örneğin metinParantez arasındaki metni ayıklamak için desen

"Merhaba (Java)" `ise

O zaman nasıl sadece "Java" olsun.

Teşekkürler.

+1

Propagency with indexOf': http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf%28int%29 – PeterMmm

+5

Şimdiye kadar neler denediniz? İç içe köşeli parantezler ile ne yapmak istersin, ör. "Merhaba (Foo ve (Bar))"? "Merhaba (Foo) ve (Bar)" gibi birden fazla parantez değeri olan durumlar nedir? –

cevap

35

bu deneyin:

String x= "Hello (Java)"; 
Matcher m = Pattern.compile("\\((.*?)\\)").matcher(x); 
while(m.find()) { 
    System.out.println(m.group(1)); 
} 

veya

String str = "Hello (Java)"; 
String answer = str.substring(str.indexOf("(")+1,str.indexOf(")")); 
+2

@rupinderjeet Siz ve +1 veren iki adam, bu tür yorumları yazmadan/desteklemeden önce cevapların verildiği tarih ve saati kontrol etmelisiniz. – aProgger

18
List<String> matchList = new ArrayList<String>(); 
Pattern regex = Pattern.compile("\\((.*?)\\)"); 
Matcher regexMatcher = regex.matcher("Hello This is (Java) Not (.NET)"); 

while (regexMatcher.find()) {//Finds Matching Pattern in String 
    matchList.add(regexMatcher.group(1));//Fetching Group from String 
} 

for(String str:matchList) { 
    System.out.println(str); 
} 

ÇIKIŞ

Java 
.NET 

\\((.+?)\\) ne anlama geliyor?

Bu normal Anlatım düzeni yüzden \\) için bu karakteri, aynı şey kaçmak ihtiyacım da RegExp içinde ayrılmıştır olarak ( maç olacak hangi \\( itibaren başlayacak ve (.*?) Grubu olarak kabul () yılında üstelik herhangi bir karakter sıfır veya daha fazla zaman her şeyi eşleşir biz buluyoruz.

+1

İfadede ["1", "5", "7"] dizeleri nasıl alınır. Sonuç "1", "5" ve "7" olmalıdır. Aşağıdaki gibi kullanalım: 'Pattern regex = Pattern.compile ("\\ [(. *?) \\]"); ' – user1182217

+0

@ user1182217' Pattern regex = Pattern.compile (" (\ ". *?) Desenini kullanabilirsiniz. \ ")"); 've eşleştiriciyi grop 1'i almak için kullanın. –

+1

kadar oylama için oylama (y) – vicky

2

ben regex kullanarak daha basit bir şey, bu, ama (benim yaptığım gibi) burada topraklarda aynı/benzer soru ile herkes için 3 yıl önce istendi biliyorum: sizin örnekte

String result = StringUtils.substringBetween(str, "(", ")"); 

result, "Java" olarak iade edilir. StringUtils kütüphanesini (nispeten basit) dizi manipülasyonu için tavsiye ederim; Uygun olmayan otomatik girişler gibi işleri otomatik olarak yapar. substringBetween için

Belgeleri(): https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substringBetween-java.lang.String-java.lang.String-java.lang.String-

var açma ve kapama sınırlayıcı aynı olup olmadığına bağlı olarak, bu fonksiyonun iki diğer versiyonlar vardır ve ayırıcı (lar) (ler) de meydana gelip hedef dize birden çok kez.