2014-06-17 33 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