我在R中寻找一个正则表达式来替换2个字母字符之间的数字。例如,将3
替换为m
,如下所示:
Sa3ple
变为Sample
Sample1.3
停留Sample1.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)
答案 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来学习