2010-10-28 130 views
0

我試圖用Java編寫一個正則表達式來擺脫所有的標題,並在一個字符串尾礦標點符號除了"-",但保持不變的話中的標點符號。正則表達式刪除標題和尾礦標點符號

  1. 我想現在有""String regex = "[\\p{Punct}+&&[^-]]";更換標點符號,但它會刪除字中的標點符號太多。

  2. 我也試圖匹配模式:String regex = "[(\\w+\\p{Punct}+\\w+)]";Matcher.maches()匹配一組,但它給了我零輸入String word = "#(*&wor(&d#)("

我想知道什麼是對付在正則表達式組匹配的正確方法這種情況下

實例:

Input: @)($&[email protected])($&     Output: word 
Input: @)($)[email protected]#)(*$&$  Output: [email protected] 
+0

你可以放下一些樣本數據嗎? – Keng 2010-10-28 15:43:41

回答

2
Pattern p = Pattern.compile("^\\p{Punct}*(.*?)\\p{Punct}*$"); 
    Matcher m = p.matcher("@)($)[email protected]#)(*$&$"); 
    if (m.matches()) { 
     System.out.println(m.group(1)); 
    } 

爲了給一些更多的信息,關鍵是有開始和結束的字符串的正則表達式標記(^和$),並有中間部分匹配非貪婪(使用*?而不是*)。

+0

被警告'\ p {Punct}'是POSIX'[[:punct:]]'字符類的僅ASCII版本。這個(相當小的)集合包括Unicode編碼角度的字符,它們都屬於'\ pP' *標點符號*和'\ pS' *符號。*這是因爲Unicode在兩個不同的通用類別中只有一個是POSIX。 – tchrist 2010-12-02 02:58:50

相關問題