2017-01-16 86 views
0

這裏是我的問題:分組正則表達式

我有一個很長的字符串由不同的標籤界如此多的價值。這些值包括中文,英文措辭和數字。

我想通過指定模式分開。下面是一個例子: (我想找到的圖案XXXXXX其中xxxx是中國,英文,數字或任何符號,但不包括「<」或「>」作爲這兩個符號是識別代碼)

但是,我發現這些模式有些奇怪。該模式似乎並沒有recgonize前兩個標籤(),但第二個

String a = "<f\"number\">4 <f\"number\"><f$n0>14 <h85><f$n0>4 <f$n0>2 <f$n0>2 7 -<f\"Times-Roman\">7<f\"number\">"; 
Pattern p = Pattern.compile("<f\"number\">[\\P{sc=Han}*\\p{sc=Han}*[a-z]*[A-Z]*[0-9]*^<>]*<f\"number\">"); 
Matcher m = p.matcher(a); 

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

輸出是

+0

如果您需要解析XML/HTML,你應該考慮使用XML解析器。正則表達式並沒有像處理這個那麼熱。 –

+0

對不起,想念一些信息。 – DickDickSean

+0

預期的結果應該是 – DickDickSean

回答

2

的字符類[\\P{sc=Han}*\\p{sc=Han}*[a-z]*[A-Z]*[0-9]*^<>]*匹配0或多個任意字符作爲同我的字符串,因爲\\P{sc=Han}\\p{sc=Han}是相反的。

我想你想:

Pattern p = Pattern.compile("<f\"number\">[\\P{sc=Han}a-zA-Z0-9]*<f\"number\">"); 

您可能需要添加空格:

Pattern p = Pattern.compile("<f\"number\">[\\P{sc=Han}a-zA-Z0-9\s]*<f\"number\">"); 

或:

Pattern p = Pattern.compile("<f\"number\">[^<]*<f\"number\">"); 
+0

謝謝我試過這個,但m.group()仍然返回整個字符串的任何其他想法? – DickDickSean

+0

它的工作原理。我真笨。非常感謝你〜3〜 – DickDickSean

+0

@DickDickSean:不客氣,很高興幫助。隨意標記答案爲接受,它應該爲未來的讀者使用。請參閱:http://stackoverflow.com/help/accepted-answer – Toto