2012-12-06 76 views
1

替換特殊字符,一個或多個空格和期間,我有以下字符串:Java的正則表達式的特殊字符和週期

See it now! .5..%..off your purchase!.Only today. 

我想它是

See it now! 5% off your purchase! Only today. 

那就是:

每個特殊字符後跟零個或多個空格和一個或多個句點,將被替換爲特殊字符和空格。在數字和2個週期的情況下,將僅替換空格

我該怎麼做?

+0

請定義「特殊字符」 – Bohemian

+0

什麼是非字 – Dejell

回答

2

\試試這個

String resultString = subjectString.replaceAll("\\B[ .]+", " "); 

這一個或多個空格或由非單詞邊界之前週期相匹配。然後這些被替換爲一個空格。

編輯基於經修正的問題

String resultString = subjectString.replaceAll("\\B[ .]+|(\\d)\\.+", "$1 "); 

另外相匹配的數字,然後按一個或多個週期。這些時期被一個空間所取代。

+0

好主意,適用於示例字符串。但它也會匹配多個空格(與標點符號無關),這可能不是所期望的。但是對於單詞邊界來說是+1 –

+0

@TimPietzcker啊是的!接得好。 – garyh

+0

這對我來說實際上更好 - 因爲領先期也被刪除了 – Dejell

1

這應該工作:

String resultString = subjectString.replaceAll(
    "(?x)  # verbose regex        \n" + 
    "(\\p{P}) # Match and capture a punctuation character \n" + 
    "\\ *  # Match zero or more spaces     \n" + 
    "\\.  # Match a dot", "$1 "); 
+0

什麼是冗長的正則表達式? – Dejell

+1

'(?x)'標誌允許我向正則表達式添加註釋。 –