2016-08-14 53 views
1

我試圖構建一個正則表達式和替換字符串,我可以用它來插入缺失撇號。例子:有效的正則表達式來插入缺失撇號?

不要 - >不要

伊利諾伊州 - >我要

我能得到這個與捕捉組的工作,但是我想只需要調用。更換一次。現在,我有這樣的:

$apostropheregex = '\b((didn|won|ain|don)(t)|(i)(ll|m))\b' 
$apostrophereplacement='$2$4''$3$5' 

但感覺醜陋的兩個前綴組,並假設這兩個後綴組,我們只匹配一個或另一個(或者是「LL」或「T進行混搭在一起「match)

有沒有人有任何建議?有沒有更好的方法來解決這個問題?我是否應該將這些視爲兩個單獨的場景,並使用單獨的正則表達式和替換字符串運行兩次?

更新:爲了澄清,我知道這可能會產生意想不到的後果,取代不應被替換的字符串,因爲不考慮英語語法上下文。我在首先查看字符串之後手動運行此操作,但我仍然認爲這是一個有趣的問題。

+0

什麼正則表達式的味道? – Laurel

+0

@Laurel似乎是php – hjpotter92

+0

「愚蠢的Dont,不明白英語不是可以細分的,一定是生病了,所以我開槍了,現在我需要一個新的Dont,它不僅可以做簡單的解析「。 –

回答

2

剛一說明:這是不適合的... 不適合,成爲我會不適應

但你問了一個更好的正則表達式,你會得到。我會用:

\b(?|(don)(t)|(won)(t)|(you)(re))\b 

更換將是$1'$2

這個正則表達式的主要優點是可讀性。您應該可以輕鬆地添加新的更改。

它通過使用分支重置組(?| )工作。這意味着每次交替使用$1$2(而不是2n + 1和2n + 2)。

+0

謝謝。我意識到這可能會導致一些過度糾正,但我使用這種方法的背景是風險相當低。你建議的正則表達式肯定更可讀。謝謝! – BenjiFB

+0

另外,感謝您關於分支重置組的啓發。很酷。 – BenjiFB