2013-09-27 65 views
0

我需要匹配一個模式以從單詞中去除's以及結尾'。我使用了正則表達式模式:Java正則表達式匹配帶撇號的字符串

(\\w+)('s$|s'$|'$). 

我需要第一組。然而,這種模式發生的是類似cats'這樣的詞與第三種模式匹配,即'$。因此我的group(1)仍然有cats。我嘗試使用模式:

(\\w+)('s$|s'$|([^s] & '$). 

但這裏發生的事情是一個詞abc' 1組剛剛ab和羣組2 c'。有關如何處理此問題的任何建議。

+1

這是不是很清楚你真正想要什麼。你可以發佈一些示例輸入,並輸出? –

+0

我需要從字符串中去掉撇號和's',即's和s'。還有任何以'結尾的單詞。例如,貓被「貓和貓的不好是貓和貓」應該是貓。 –

+0

其實對於模式(\\ w +)('s $ | s'$ |'$)有沒有什麼辦法可以給$ s'$'$賦予優先權,因爲現在貓被認爲是'$案件,而不是s'$。 –

回答

0

你可以使用這樣的正則表達式嗎?

(\\w+)s?'(?:s\\b)? 

由第一捕獲組更換,或者用一個回顧後:

(?<=\\w)s?'(?:s\\b)? 

我用了一個詞邊界,表明沒有更多的字母s我認爲這是你正在嘗試後與$和空間做。

cats cat's cats' 

成爲:

cat cat cat 

編輯:既然你想保持cat'cat'

(?<=\\w)(?:s'|'s\\b) 

cats cat's cats' cat'變得cat cat cat cat'

+0

我也需要貓來留下貓。 –

+0

@ that_me123更新了正則表達式。看看最後一個是否適合你。 – Jerry

0

不知道什麼輸入/輸出都應該是完全相同(見羅希特的評論),但涉及String.replaceAll溶液(取正則表達式String作爲參數)可以去,如:

String input = "cats cat's cats' dawgs"; 
System.out.println(input.replaceAll("'s?\\W", " ")); 

輸出:

cats cat cats dawgs 
+0

我還需要刪除's'。 –

+0

@ that_me123看到我的編輯。 – Mena