2014-08-30 108 views
-2

我有以下StringJava正則表達式提取數據

String s = "[email protected]={aaaa}[email protected]={dddddddddd}" 

我將如何使用Java正則表達式來解壓到:

Type=aaaa 
Type=dddddddddd 
+0

你的問題是不明確的,請準確定義你需要匹配和捕獲數據。你的「Type = aaaa」根本不是你給定數據的一部分,根本不能被捕獲。 – 2014-08-30 14:05:39

+0

是的,有一些,我需要提取所有這樣的模式。 @ XXX = {xxxx} – 2014-08-31 04:21:33

回答

0
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Extract { 
    public static final Pattern PATTERN = Pattern.compile("(@)(\\w+)(=\\{)(d\\s*)+(})|(@)(\\w+)(=\\{)(a\\s*)+(})"); 
    public static void main(String[] args) { 
     String s = "[email protected]={aaaa}[email protected]={dddddddddd}"; 


     Matcher matcher = PATTERN.matcher(s); 

     while (matcher.find()) { 
      System.out.println(matcher.group()); 
     } 


    } 
} 
+0

正則表達式對我來說似乎是錯誤的,它匹配所有ds和as,但僅捕獲其中一個。應該是(d +)|(a +)我猜。 – 2014-08-30 14:04:38

+0

這就是我的想法,它應該匹配D或A的。對於例如,如果輸入的是dddddddddddaaa @類型= {AAAA} ddddddddddddddddd @類型= {DDDDDDDDDD}然後我的程序打印的
ddddddddddd
AAA
AAAA
ddddddddddddddddd
DDDDDDDDDD
sol4me 2014-08-30 14:09:35

+0

您expresion似乎是一個小問題,它可以「噸me.a 工作 一個 一個 一個 d 一個 d 一個 一個 一個 – 2014-08-31 04:13:06

0

你真的應該閱讀正則表達式Java已經提供了一個文檔,並且有很多工具可以測試給定字符串的正則表達式。針對您的問題,有一種可能是:

"Type=\\{((?:a|d)+)\\}" 

Docs in Java

QuickREx

0
import java.util.regex.Pattern; 
import java.util.regex.Matcher; 

public class Test { 
    public static void main(String[] args) { 
     String str = "[email protected]={aaaa}[email protected]={dddddddddd}"; 

     Pattern pattern = Pattern.compile("@Type=\\{.*?\\}"); 
     Matcher matcher = pattern.matcher(str); 

     while(matcher.find()) { 
      String match = matcher.group(); 
      match = "Type=" + match.substring(7, match.length() - 1); 
      System.out.println(match); 
     } 
    } 
} 
+0

如果我改變類型給別人的話。這不適合我。 – 2014-08-31 04:50:44

+0

這就是爲什麼你應該花時間學習一些細節問題,你的問題沒有提及「其他詞」而不是「類型」。 – 2014-08-31 06:24:27

1

我想這是你想要什麼:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Extract 
{ 
    public static final Pattern p = Pattern.compile("(Type=)(\\{(.*?)\\})+"); 

    public static void main(String[] args) { 
     String s = "[email protected]={aaaa}[email protected]={dddddddddd}"; 
     Matcher m = p.matcher(s); 

     while (m.find()) { 
      // Capture group 1 = "Type=" 
      System.out.print(m.group(1)); 
      // Capture group 3 is what's between the curly braces 
      System.out.println(m.group(3)); 
     } 
    } 
} 

這會產生以下結果:

類型= AAAA
類型= DDDDDDDDDD