2017-09-01 32 views
-4

我正在尋找R中的正則表達式來替換2個字母字符之間的數字。例如,m取代3,像這樣:正則表達式來替換R中的字母數字

  • Sa3ple成爲Sample

  • Sample1.3保持Sample1.3

    • 這個詞statys一樣的,因爲3不是字母字符之間

我試着用下面的R代碼替換3m,但它只是部分工作。

一個問題是,如果正則表達式匹配,而不是替換匹配的行,每次它從col3替換第一行。不知道,究竟錯過了什麼。

df$col3[grep('[a-zA-Z][3][a-zA-Z]|[3][a-zA-Z]',df$col3)] <- gsub('[3]+', 'm', df$col3) 
+3

請做研究的最小量 - 明碼寫請求不被好評這裏。請參閱[參考 - 這個正則表達式是什麼意思](https://stackoverflow.com/q/22937618/205233) – Filburt

+0

我可以寫你的代碼,但這會教你,我們只會給你答案,沒有你顯示證明嘗試過任何東西。相反,我會向您介紹完成此任務所需的所有信息。 '(''''在關閉它時關閉它(語法是'(...)',其中省略號顯然被* something *取代,您要捕獲)。 '\ w'匹配任何*字*字符,'\ d'匹配任何*數字*。 「+」是一個量詞,用於指定匹配應該包含1和前一個字符選擇的無限制。 – ctwheels

+0

爲了繼續我以前的評論,在正則表達式替換'$'後跟一個數字指向一個捕獲組。所以如果你有一個捕獲組(')','$ 1'將指向捕獲的內容。如果您嘗試編寫一些正則表達式並更新問題,則更有可能得到正確的回答,因爲它表明您已嘗試過**。畢竟,我們爲什麼要試圖幫助那些甚至不會嘗試自己的人呢?顯示試驗和錯誤的證據,你會得到你的答案。 – ctwheels

回答

0

正則表達式是硬

pos <- "Sa3ple" 
neg <- "Sample1.3" 

gsub("([a-zA-z])\\d([a-zA-z])", "\\1m\\2", pos) 
"Sample" 

gsub("([a-zA-z])\\d([a-zA-z])", "\\1m\\2", neg) 
"Sample1.3" 

說明

(...) is group, which is referenced with \\1, \\2, etc 
[a-zA-Z] is lower and uppercase letter (only 1) 
\\d is any digit (add + or {2}) to identify more than 1 digit 

我用這個site學習