2014-10-30 28 views
1

我想拿出一個正則表達式,擺脫所有的標點符號(如果有一個或多個)在頂部和一個字符串的結尾。 我現在使用正則表達式如下:(字是我要轉換的字符串)正則表達式,擺脫所有在一個字符串的頂部和末尾的標點

word = word.replaceAll("['?:!.,;]*([a-z]+)['?:!.,;]*", "$1").toLowerCase(); 

但是,我仍然得到一些奇怪的案件。例如,'Amen'轉到'amen'''tis轉到'tis。任何人都可以幫我修改它,以便'Amen'將會去amen''tistis。提前致謝!

回答

2

更換以下圖案:

^\p{P}+|\p{P}+$ 

隨着空字符串。

Demo

\p{P}裝置任何標點字符。正則表達式的第一部分將在開始時刪除標點符號,第二部分將在最後刪除標點符號。

1

在Java中,你可以使用:

\\p{Punct} 

,以確定一個標點符號。

從開始或結束使用該刪除標點符號:

String word = word.replaceAll("^\\p{Punct}+|\\p{Punct}+$", ""); 
0

我無法''tis成爲'tis重現的問題,但與'Amen'問題是,你的正則表達式不接受大寫字符,因爲[a-z]只能接受小寫字母。您可以通過將A-Z添加到您的角色等級來改變它,或者使用(?i)標誌使您的正則表達式不區分大小寫。

所以儘量也許

replaceAll("['?:!.,;]*([a-zA-Z]+)['?:!.,;]*", "$1") 

replaceAll("(?i)['?:!.,;]*([a-z]+)['?:!.,;]*", "$1") 

你也可以改變你的策略,只是在字符串的開始或結束的字符串刪除標點符號。在這種情況下,你可以只使用

replaceAll("^\\p{Punct}+|\\p{Punct}+$",""); 

其中

  • ^表示字符串的開始
  • $表示字符串
  • \\p{Punct}的一端代表標點字符(!"#$%&'()*+,-./:;<=>[email protected][]^_`{|}~一個字符類字符),但你可以使用自己的['?:!.,;]類,如果你想
相關問題