正则表达式替换R中字母之间的数字

时间:2017-09-01 14:05:21

标签: r regex

我在R中寻找一个正则表达式来替换2个字母字符之间的数字。例如,将3替换为m,如下所示:

  • Sa3ple变为Sample

  • Sample1.3停留Sample1.3

    • 此单词的状态相同,因为3不在字母字符之间

我尝试使用以下R代码将3替换为m,但它只是部分工作。

一个问题是,如果正则表达式匹配,而不是替换匹配的行,每次它都从col3替换第一行。不确定,究竟缺少什么。

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

1 个答案:

答案 0 :(得分: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来学习