2014-08-30 111 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