2014-06-17 32 views
0

我想使用正则表达式提取文本,但它不工作。虽然我的正则表达式在正则表达式验证器上工作得很好。我想使用正则表达式提取文本,但它不工作

public class HelloWorld { 

    public static void main(String []args){ 

     String PATTERN1 = "F\\{([\\w\\s&]*)\\}"; 
     String PATTERN2 = "{([\\w\\s&]*)\\}"; 

     String src = "F{403}#{Title1}"; 
     List<String> fvalues = Arrays.asList(src.split("#")); 

     System.out.println(fieldExtract(fvalues.get(0), PATTERN1)); 
     System.out.println(fieldExtract(fvalues.get(1), PATTERN2)); 
    } 

    private static String fieldExtract(String src, String ptrn) { 
     System.out.println(src); 
     System.out.println(ptrn); 
     Pattern pattern = Pattern.compile(ptrn); 
     Matcher matcher = pattern.matcher(src); 
     return matcher.group(1); 
    } 
} 
+1

哪些文字?是你想要提取的Title1吗? –

+0

我想提取403以及Title1。 – vaspaean

+0

你的模式是错误的。 – TheLostMind

回答

0

为什么不使用:

Pattern regex = Pattern.compile("F\\{([\\d\\s&]*)\\}#\\{([\\s\\w&]*)\\}"); 

两者都要?

这样数字将在组1和组2中的标题。

另一件事,如果你要编译正则表达式(这可能有助于性能),至少使正则表达式对象是静态的,这样每次调用函数时它都不会被编译(哪种错过了整个预编译点:))

基本演示here

+0

谢谢,它的工作原理。 – vaspaean

+0

@vaspaean很高兴,考虑接受答案虽然(这是'V'标志附近)... – Scis

+0

对不起,我是新的堆栈溢出。再次感谢。:) – vaspaean

0

第一个问题:

String PATTERN2 = "\\{([\\w\\s&]*)\\}"; // quote '{' 

问题二:

Matcher matcher = pattern.matcher(src); 
    if(matcher.matches()){ 
     return matcher.group(1); 
    } else ... 

匹配器必须被要求犁领域,否则你就没有收获的结果。

+0

感谢您的帮助。 – vaspaean

+0

那么,缺少的匹配()电话是主要问题。 – laune

+0

其实我正在使用这个,但似乎matcher.matches()不会重置状态,这造成了一些问题。 – vaspaean