2017-09-01 33 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学习