我想從段落中刪除除某些詞外的所有數字。正則表達式從段落中刪除所有數字
我嘗試使用負前瞻:
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'
我想從段落中刪除除某些詞外的所有數字。正則表達式從段落中刪除所有數字
我嘗試使用負前瞻:
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'
你真的不能在這裏使用負前瞻,因爲它仍然會取代當光標位於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%你有什麼,但請記住,.
是一個通配符,並且將匹配任何字符(除了換行符),除非你逃脫它。
你的正則表達式實際上是找到每一個不是「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)
謝謝!這也適用,但第一個解決方案很容易推廣。 – agstudy
謝謝!這工作。 – agstudy
@Jerry隨時待命。 +1 =) – hwnd
@agstudy不客氣:) – Jerry