word<-"xyz9874w9874w"
gsub( "([a-z]+)([0-9]+)([a-z])(\\w)", "\\1", word )
[1] "xyz874w"
gsub( "([a-z]+)([0-9]+)([a-z])(\\w)", "\\2", word )
[1] "9874874w"
gsub( "([a-z]+)([0-9]+)([a-z])(\\w)", "\\3", word )
[1] "w874w"
gsub( "([a-z]+)([0-9]+)([a-z])(\\w)", "\\4", word )
[1] "9874w"
在我看来:
xyz
; 9874
; w
; 9874w
; 为什么reslut不是:
gsub( "([a-z]+)([0-9]+)([a-z])(\\w)", "\\1", word )
[1] "xyz"
gsub( "([a-z]+)([0-9]+)([a-z])(\\w)", "\\2", word )
[1] "9874"
gsub( "([a-z]+)([0-9]+)([a-z])(\\w)", "\\3", word )
[1] "w"
在([az] +)([0-9] +)([az])(\ w)中添加*
是正确的,使其成为([az] +)([ 0-9] +)([AZ])(\ W *),
如果我的常规模式中没有*
,如何理解结果?
答案 0 :(得分:3)
使用\\w
的模式正在寻找任何“单词字符”(== [[:alnum:]_]
),而看起来您可能想要查找实际的“w”:\\w
匹配“9”,其余字符“874w”未被替换。如果你想匹配字符串的其余部分,那么为什么第四个捕获组没有“。+ $”?
gsub( "([a-z]+)([0-9]+)([a-z])(.+$)", "\\1", word )
[1] "xyz"
> gsub( "([a-z]+)([0-9]+)([a-z])(.+$)", "\\2", word )
[1] "9874"
> gsub( "([a-z]+)([0-9]+)([a-z])(.+$)", "\\3", word )
[1] "w"
> gsub( "([a-z]+)([0-9]+)([a-z])(.+$)", "\\4", word )
[1] "9874w"
根据底层问题的未说明的“规则”,它可以添加特殊性以将“^”作为前导模式字符,以便匹配从第一个字符开始。