2013-12-20 96 views
1

我想從段落中刪除除某些詞外的所有數字。正則表達式從段落中刪除所有數字

我嘗試使用負前瞻:

gsub('(?!ami.12.0|allo.12)[[:digit:]]+','', 
     c('0.12','1245','ami.12.0 00','allo.12 1'),perl=TRUE) 

但是,這是行不通的。我得到這個:

"."  ""  "ami.. " "allo." 

還是我預期的輸出結果是:

"."  ""  'ami.12.0','allo.12' 

回答

3

你真的不能在這裏使用負前瞻,因爲它仍然會取代當光標位於ami之後的某一點。

你可以做的是放回一些比賽:

(ami.12.0|allo.12)|[[:digit:]]+ 

gsub('(ami.12.0|allo.12)|[[:digit:]]+',"\\1", 
     c('0.12','1245','ami.12.0 00','allo.12 1'),perl=TRUE) 

我不停的.,因爲我敢肯定不是100%你有什麼,但請記住,.是一個通配符,並且將匹配任何字符(除了換行符),除非你逃脫它。

+0

謝謝!這工作。 – agstudy

+1

@Jerry隨時待命。 +1 =) – hwnd

+0

@agstudy不客氣:) – Jerry

1

你的正則表達式實際上是找到每一個不是「ami.12.0」或「allo.12」開頭的數字序列。因此,例如,在您的第三個字符串中,它將到達ami.12.0中的12,並向前看,看看12是兩個被忽略的字符串中的任何一個的開始。它不是,所以它繼續取代它。最好概括一下,但在你的具體情況下,你可以通過對任何你想跳過的單詞的前綴(可以跟隨數字序列)做一個否定的倒序來達到目的。所以,你會用這樣的東西:

gsub('(?<!ami\\.|ami\\.12\\.|allo\\.)[[:digit:]]+','', 
     c('0.12','1245','ami.12.0 00','allo.12 1'),perl=TRUE) 
+0

謝謝!這也適用,但第一個解決方案很容易推廣。 – agstudy

相關問題