2016-02-26 36 views
1

我有樣本矢量如下:不同的值,這取決於字符周圍/數值替代:GSUBř

vec1 <- c('3/4 in. of water', 'Indoor/Outdoor applications') 

現在,我想「由」替換「/」彷彿值周圍「/ 「是數字和」'如果值圍繞‘/’是字符串

我知道正則表達式匹配可以是:

gsub('\\d+\\/\\d+', 'by', vec1) 
gsub('\\w+\\/\\w+', 'by', vec1) 

然而,他們給出的結果如下:

"by in. of water" 
"by in. of water" "by applications" 

我想結果如下:

'3 by 4 in. of water', 'Indoor Outdoor applications' 

欣賞我如何能得到這些結果的任何投入。

謝謝!

+0

找到一個正則表達式的教程和搜索有關「捕獲組」和「字符類'\ w'」。請注意,您的問題也可以通過「lookaround」(lookahead,lookbehind)來解決。你確定量詞在這裏有用嗎?從哪裏來「周圍」的空間? 「字符串」是什麼意思? –

回答

1

gsub('(\\d+)\\/(\\d+)', '\\1 by \\2', vec1)

gsub('(\\w+)\\/(\\w+)', '\\1 \\2', vec1)

圍繞\\d+\\w+意思,「捕捉無論是在這些括號,所以我們可以在以後使用」括號。

第一組括號可以通過\2,等等(因爲我們需要在這裏逃避它,使該\\1\\2)指\1,第二套以後使用。

當我們繼續說出我們想要取代我們的匹配時,這是我們可以參考模式/匹配的那些「捕獲」部分,正如您可以看到我們在頂部模式中所做的那樣。

+0

謝謝......這個技巧 –

+0

你可以用'/'替換模式中的'\\ /',因爲斜槓不是特殊的正則表達式元字符。 –

2

您可以使用PCRE正則表達式模式。 (?<=\\d)/(?=\\d)匹配正斜槓,用數字括起來。 /(?!\\d)|(?<!\\d)/匹配右側沒有數字的斜槓或左側沒有數字的斜線。

這裏是gsub溶液:

​​

可以使用mgsub從qdap封裝並定義圖案和替換字符向量。

見示例代碼:

> library(qdap) 
> vec1 <- c('3/4 in. of water', 'Indoor/Outdoor applications') 
> repl <- c(' by ', ' ') 
> patt <- c('(?<=\\d)/(?=\\d)', '/(?!\\d)|(?<!\\d)/') 
> mgsub(patt, repl, vec1, fixed=FALSE, perl=T) 
## [1] "3 by 4 in. of water" "Indoor Outdoor applications" 
+0

謝謝Wiktor..This也是一個很好的解決方案。 –

相關問題